docker 使用不在 vpc 内的 ip

docker using ip not within vpc

所以我无法弄清楚为什么我无法从 public IP 连接到我的容器,直到我发现 docker 端口正在侦听的 IP...如果你看到 ifconfig 正在显示172...这在我的 vpc 中无效...您可以在下面看到我在我的 vpc 中没有使用任何 172...所以..我不确定这是从哪里得到的...我应该创建一个新的子网在一个新的 vpn 中创建一个 ami 并在具有一致子网的新 vpc 中启动它?我可以更改 docker ip/port 它正在监听吗?

ifconfig
br-387bdd8b6fc4 Link encap:Ethernet HWaddr 02:42:69:A3:BA:A9
inet addr:172.18.0.1 Bcast:172.18.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:69ff:fea3:baa9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:114269 errors:0 dropped:0 overruns:0 frame:0
TX packets:83675 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:11431231 (10.9 MiB) TX bytes:36504449 (34.8 MiB)

docker0 Link encap:Ethernet HWaddr 02:42:65:A6:7C:B3
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

eth0 Link encap:Ethernet HWaddr 02:77:F6:7A:50:A6
inet addr:10.0.140.193 Bcast:10.0.143.255 Mask:255.255.240.0
inet6 addr: fe80::77:f6ff:fe7a:50a6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1
RX packets:153720 errors:0 dropped:0 overruns:0 frame:0
TX packets:65773 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:209782581 (200.0 MiB) TX bytes:5618173 (5.3 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:30 errors:0 dropped:0 overruns:0 frame:0
TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2066 (2.0 KiB) TX bytes:2066 (2.0 KiB)

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.18.0.11 tcp dpt:389
ACCEPT tcp -- 0.0.0.0/0 172.18.0.13 tcp dpt:9043
ACCEPT tcp -- 0.0.0.0/0 172.18.0.13 tcp dpt:7777
ACCEPT tcp -- 0.0.0.0/0 172.18.0.3 tcp dpt:9443
ACCEPT tcp -- 0.0.0.0/0 172.18.0.7 tcp dpt:443
ACCEPT tcp -- 0.0.0.0/0 172.18.0.8 tcp dpt:443
ACCEPT tcp -- 0.0.0.0/0 172.18.0.9 tcp dpt:443

DockerSubnet1-Public 10.0.1.0/24
DockerSubnet2-Public 10.0.2.0/24
DockerSubnet3-Private 10.0.3.0/24
DockerSubnet4-Private 10.0.4.0/24
Private subnet 1A 10.0.0.0/19
Private subnet 2A 10.0.32.0/19
Public subnet 1 10.0.128.0/20
Public subnet 2 10.0.144.0/20 

使用 Docker 网络的标准方法是使用 docker run -p 命令行选项。如果你 运行:

docker run -p 8888:80 myimage

Docker会自动设置一个端口转发,从主机上的8888端口到容器中的80端口。

如果您的主机有多个接口(您暗示 "public IP",虽然它没有在您的 ifconfig 输出中单独显示)您可以通过添加IP 地址

docker run -p 10.0.140.193:8888:80 myimage

Docker-internal 172.18.0.0/16 地址基本上没用。它们是一个重要的实现细节between 容器,但 Docker 提供内部 DNS 服务,将容器名称解析为内部 IP 地址。在弄清楚如何与来自 "outside" 的容器通信时,您不需要这些 IP 地址。

您问题中的术语强烈暗示亚马逊网络服务。这里的一个常见问题是您的 EC2 实例 运行 在不允许入站连接的安全组(网络级防火墙)下。

我从来没有弄清楚为什么..我确实允许安全组和网络 acls 等中的所有入站和出站流量..我从我的实例中创建了一个 ami,将其复制到另一个区域,并新建了一个vpc 并部署在那里。有用!!将其归结为 AWS VPC。 感谢 172.x 的澄清,我不知道那是在 docker 容器之间...现在说得通了。