Networking 如何在无法访问internet的用户定义网络上调试docker容器
网络不是我的强项之一,所以如果我在这里遗漏了什么,请原谅我 我正在使用Centos7作为我的主机操作系统。Docker版本17.03.0-ce,构建60ccb22 我使用以下方法创建网络:Networking 如何在无法访问internet的用户定义网络上调试docker容器,networking,docker,Networking,Docker,网络不是我的强项之一,所以如果我在这里遗漏了什么,请原谅我 我正在使用Centos7作为我的主机操作系统。Docker版本17.03.0-ce,构建60ccb22 我使用以下方法创建网络: docker网络创建--驱动程序=网桥--子网=10.19.0.0/16开发 我使用以下命令运行容器: sudo docker run-dit--name=php-nginx1--net=development--ip=10.19.74.23--volume/vagrant/wordpress:/var/ww
docker网络创建--驱动程序=网桥--子网=10.19.0.0/16开发
我使用以下命令运行容器:
sudo docker run-dit--name=php-nginx1--net=development--ip=10.19.74.23--volume/vagrant/wordpress:/var/www/wordpress--expose 80 php nginx
当我从容器内部ping 216.58.216.36(谷歌)时,结果如下:
PING 216.58.216.36(216.58.216.36)56(84)字节的数据。
从10.19.74.23开始icmp_seq=1目标主机无法访问
如果我在没有指定网络的情况下运行容器,我可以ping 216.58.216.36而没有问题
主机上ifconfig的结果如下
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:7fff:fee2:8f4e prefixlen 64 scopeid 0x20<link>
ether 02:42:7f:e2:8f:4e txqueuelen 0 (Ethernet)
RX packets 13674 bytes 609692 (595.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16644 bytes 182882110 (174.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::5054:ff:fe22:5b53 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:22:5b:53 txqueuelen 1000 (Ethernet)
RX packets 322262 bytes 409758704 (390.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 47924 bytes 3329709 (3.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.19.74.21 netmask 255.255.255.0 broadcast 10.19.74.255
inet6 fe80::a00:27ff:feb9:e12 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:b9:0e:12 txqueuelen 1000 (Ethernet)
RX packets 2 bytes 120 (120.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 28 bytes 2016 (1.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 84 bytes 7244 (7.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 84 bytes 7244 (7.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
从countainer开始的路线结果为:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.19.0.1 0.0.0.0 UG 0 0 0 eth0
10.19.0.0 * 255.255.0.0 U 0 0 0 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
10.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br- ca991944118f
10.19.74.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
link-local 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
来自主机的路由将导致:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.19.0.1 0.0.0.0 UG 0 0 0 eth0
10.19.0.0 * 255.255.0.0 U 0 0 0 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
10.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br- ca991944118f
10.19.74.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
link-local 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
我不知道该怎么处理否决票。我已经研究了与docker容器无法访问internet有关的其他问题,但它们似乎都与容器根本无法访问外部地址有关。如果未将此容器分配给我创建的网络,但连接到我创建的网络时,此容器无法访问internet
由于我的网络知识有限,我很难找到调试这个问题的起点。解决这个特定问题的方法会很好,但是调试这个问题的方法会更好
如何调试此问题?您似乎试图使用与eth1上相同的IP子网配置docker网络和容器。这将导致无法正确路由的流量,因为linux不知道应该将流量发送到这两个服务器中的哪一个。最好的情况是(您似乎已经经历过)它一直向eth1发送流量,而您的容器无法通信。最糟糕的情况是,你不能通过eth1与任何人交谈 解决方案是不要尝试将容器视为轻量级VM,因为它们不是。在docker内部使用一个未使用的子网将它们旋转起来(docker将尝试使用您创建的网络自动执行此操作,如果您不强制执行此操作)。允许容器获取该网络中的任意随机IP。对于需要访问docker容器的外部连接,请在docker主机上发布一个端口,并让外部人员连接到主机上的该端口以与您的容器通信
Docker's提供了更多关于Docker内部网络工作方式和使用命令的详细信息。谢谢。这就是问题所在。我几乎想不出为什么你必须为wordpress容器使用手动网络配置的原因。既然手动网络配置对我有效,那么使用它的缺点是什么?如果不使用手动网络,您的建议是什么?可移植性…您是对的。我不再使用手动联网。