1

我有一个AWS EC2实例Docker容器正在运行,Docker容器通过Docker网络连接,该网络通过etcd集群进行复制。 但所有容器都无法连接到外部。例如,如果我ping或卷曲主机丢失100%的包。 etcd网络通过AWS私有IP进行通信。Docker容器无法连接到互联网

这里是我的搬运工信息:

[email protected]:/home# docker info 
Containers: 3 
Running: 3 
Paused: 0 
Stopped: 0 
Images: 9 
Server Version: 17.05.0-ce 
Storage Driver: devicemapper 
Pool Name: docker-202:1-2050903-pool 
Pool Blocksize: 65.54kB 
Base Device Size: 10.74GB 
Backing Filesystem: xfs 
Data file: /dev/loop0 
Metadata file: /dev/loop1 
Data Space Used: 4.554GB 
Data Space Total: 107.4GB 
Data Space Available: 102.8GB 
Metadata Space Used:sattler 6.922MB 
Metadata Space Total: 2.147GB 
Metadata Space Available: 2.141GB 
Thin Pool Minimum Free Space: 3.221GB 
Udev Sync Supported: true 
Deferred Removal Enabled: false 
Deferred Deletion Enabled: false 
Deferred Deleted Device Count: 0 
Data loop file: /var/lib/docker/devicemapper/devicemapper/data 
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata 
Library Version: 1.02.110 (2015-10-30) 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: bridge host macvlan null overlay 
Swarm: inactive 
Runtimes: runc 
Default Runtime: runc 
Init Binary: docker-init 
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145 
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228 
init version: 949e6fa 
Security Options: 
apparmor 
seccomp 
    Profile: default 
Kernel Version: 4.4.0-1028-aws 
Operating System: Ubuntu 16.04.3 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 2 
Total Memory: 7.303GiB 
Name: ip-10-0-127-34 
ID: JFQO:C56I:VM22:UDKJ:QDKD:HUDT:KL3X:JCSR:WAPG:66JL:S4RM:4ENN 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
Experimental: false 
Cluster Store: etcd://127.0.0.1:2379 
Cluster Advertise: 10.0.127.34:2376 
Insecure Registries: 
127.0.0.0/8 
Live Restore Enabled: false 

WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use. 
     Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. 
WARNING: No swap limit support 

泊坞检查网络:

 { 
    "Name": "df-global", 
    "Id": "59aef8ccc5d7464ee715428783b9b03ba7737d298f41cc30a21f4856e75b92c1", 
    "Created": "2017-08-14T09:51:31.650109966Z", 
    "Scope": "global", 
    "Driver": "overlay", 
    "EnableIPv6": false, 
    "IPAM": { 
     "Driver": "default", 
     "Options": {}, 
     "Config": [ 
      { 
       "Subnet": "192.168.1.0/14" 
      } 
     ] 
    }, 
    "Internal": false, 
    "Attachable": false, 
    "Ingress": false, 
    "Containers": { 

    "ep-f257d697653d801395f9154d086a6290694d6ded7aefe827c67dcd10808023eb": { 
      "Name": "elasticsearch-data-1", 
      "EndpointID": "f257d697653d801395f9154d086a6290694d6ded7aefe827c67dcd10808023eb", 
      "MacAddress": "02:42:c0:a8:00:0b", 
      "IPv4Address": "192.168.0.11/14", 
      "IPv6Address": "" 
     }, 
     "ep-f5c1be7a768802154b58b33e67a3f009df1d4f1336297df9f914be9a720bd8ce": { 
      "Name": "postgresql-vg_internal01-prod", 
      "EndpointID": "f5c1be7a768802154b58b33e67a3f009df1d4f1336297df9f914be9a720bd8ce", 
      "MacAddress": "02:42:c0:a8:00:02", 
      "IPv4Address": "192.168.0.2/14", 
      "IPv6Address": "" 

同样的问题在这里描述:https://forums.docker.com/t/ping-between-containers-on-different-docker-host-but-connected-by-overlay-networ-fails/9960 但没有答案

回答

1

在主机上运行机器:

sudo ip addr show docker0 

你会得到输出,其中包括:

inet 172.17.2.1/16 scope global docker0 

泊坞窗主机具有docker0网络接口的IP地址172.17.2.1。

然后启动容器:

docker run --rm -it ubuntu:trusty bash 

和运行

ip addr show eth0 

输出将包括:

inet 172.17.1.29/16 scope global eth0 

您的容器的IP地址为172.17.1.29。现在看一下路由表: 运行:

route 

输出将包括:

Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
default   172.17.2.1  0.0.0.0   UG 0  0  0 eth0 

这意味着泊坞窗主机172.17.2.1的IP地址设置为默认路由是从访问你的容器。

现在到您的主机IP试试平:

[email protected]:/# ping 172.17.2.1 
PING 172.17.2.1 (172.17.2.1) 56(84) bytes of data. 
64 bytes from 172.17.2.1: icmp_seq=1 ttl=64 time=0.071 ms 
64 bytes from 172.17.2.1: icmp_seq=2 ttl=64 time=0.211 ms 
64 bytes from 172.17.2.1: icmp_seq=3 ttl=64 time=0.166 ms 

如果这个工程很可能你就能够ping任何公共IP

希望这将有助于!

+0

感谢您的回答。如果我尝试ping本地主机,则会收到100%的包丢失和目标主机无法访问的信息 'root @ be845f307ee6:/#ping 172.17.2.1 PING 172.17.2.1(172.17.2.1)56(84)数据字节。 从172.17.0.3 icmp_seq = 1个目标主机不可访问 从172.17.0.3 icmp_seq = 2目的地主机不可达 从172.17.0.3 icmp_seq = 3目的地主机不可达 ^ C --- 172.17.2.1 ping统计--- 5数据包传输,0收到,+3错误,100%数据包丢失,时间4022ms 管3' – ghovat

+0

尝试其他答案..如果仍然没有运气..我会帮助你使你的路由表和网络固定能够ping主机 –

+0

我将Docker网络更改为docker网络创建-d覆盖--subnet 192.168.1.0/14 df-global 现在我可以蜷缩或ping外部的google.com和网站,但是如果我尝试连接或ping到其他网络中的容器丢失了一个包。 例如ping db01-prod是一个码头集装箱。我看到容器,如果我做码头网络检查名称 – ghovat

1

有一个替代虽然..如果你不想混乱与网络路由..so当运行你的容器尝试Docker支持绑定挂载文件从主机到容器。您可以绑定安装Docker控件套接字。

docker run -v /var/run/docker.sock:/var/run/docker.sock ...usual code here... 

希望它能帮上忙!

+0

我将Docker网络更改为码头网络创建-d覆盖--subnet 192.168.1.0/14 df-global现在我可以卷曲或ping外部的google.com和网站,但是如果我尝试连接或ping到其他容器网络我得到一个包丢失。例如ping db01-prod这是一个码头容器。我看到容器,如果我做码头网络检查名称 – ghovat

1

要允许容器彼此对话: 创建网络

docker network create <your-network-name> 

然后连接所有的容器新创建的网络。

docker network connect <your-network-name> <containers> 

希望它会帮助!

+0

如果它已经在网络中,它应该ping –

+0

嗨, 感谢您的答案。我用这个网络创建了$ docker network创建-d覆盖--subnet 192.168.1.0/14 df-global并连接了所有的容器。 在码头网络中检查NETWORK的最初问题中,您将看到连接的容器,但是如果我执行其中一个容器并尝试ping其中一个网络中的其他容器,我会得到100%的包丢失,并且它们不能通信。如果我从Docker检查中尝试容器名称或容器IP,也不要考虑 – ghovat

相关问题