Networking 如何在无法访问internet的用户定义网络上调试docker容器

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

网络不是我的强项之一,所以如果我在这里遗漏了什么,请原谅我

我正在使用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/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容器使用手动网络配置的原因。既然手动网络配置对我有效,那么使用它的缺点是什么?如果不使用手动网络,您的建议是什么?可移植性…您是对的。我不再使用手动联网。