Docker群集容器无法访问互联网

问题描述:

我试图在AWS中设置群集群,但主机中的容器无法访问互联网。用于地址解析或通过IP直接连接的ping命令在容器内不起作用。Docker群集容器无法访问互联网

在创建这张票之前,我看了一下this的问题,但我认为在我的情况下CIDR并不重叠。

我有以下配置:

Public Subnet CIDR : 10.2.1.0/24 
Namespace server inside this is :10.2.0.2 

Ingress overlay network --> 10.255.0.0/16 

docker_gwbridge --> 172.18.0.0/1 

我也曾尝试创建新的覆盖(192.168.1.0/24)和docker_gwbridge(10.11.0.0/16)网络,没有运气。

我创造这些选项的服务(除安装和env参数):当我创建覆盖网络,我添加选项

docker service create --publish 8098:8098 <Imagename> 

请注意通过自己--network我的 - 覆盖以及在创建命令。

任何指针,我可能会失踪/做错?

编辑1添加更多信息

下面是当我不创建一个新的覆盖网络,并与默认的持续的检查容器:

"NetworkSettings": { 
     "Bridge": "", 
     "SandboxID": "eb***", 
     "HairpinMode": false, 
     "LinkLocalIPv6Address": "", 
     "LinkLocalIPv6PrefixLen": 0, 
     "Ports": { 
      "5005/tcp": null, 
      "8080/tcp": null 
     }, 
     "SandboxKey": "/var/run/docker/netns/e***9", 
     "SecondaryIPAddresses": null, 
     "SecondaryIPv6Addresses": null, 
     "EndpointID": "", 
     "Gateway": "", 
     "GlobalIPv6Address": "", 
     "GlobalIPv6PrefixLen": 0, 
     "IPAddress": "", 
     "IPPrefixLen": 0, 
     "IPv6Gateway": "", 
     "MacAddress": "", 
     "Networks": { 
      "ingress": { 
       "IPAMConfig": { 
        "IPv4Address": "10.255.0.4" 
       }, 
       "Links": null, 
       "Aliases": [ 
        "30**" 
       ], 
       "NetworkID": "g7w**", 
       "EndpointID": "291***", 
       "Gateway": "", 
       "IPAddress": "10.255.0.4", 
       "IPPrefixLen": 16, 
       "IPv6Gateway": "", 
       "GlobalIPv6Address": "", 
       "GlobalIPv6PrefixLen": 0, 
       "MacAddress": "02:4***" 
      } 

而下面是从当我创建覆盖网络时:

"Networks": { 
      "ingress": { 
       "IPAMConfig": { 
        "IPv4Address": "10.255.0.4" 
       }, 
       "Links": null, 
       "Aliases": [ 
        "42***" 
       ], 
       "NetworkID": "jl***3", 
       "EndpointID": "792***86c", 
       "Gateway": "", 
       "IPAddress": "10.255.0.4", 
       "IPPrefixLen": 16, 
       "IPv6Gateway": "", 
       "GlobalIPv6Address": "", 
       "GlobalIPv6PrefixLen": 0, 
       "MacAddress": "02:4***" 
      }, 
      "my-overlay": { 
       "IPAMConfig": { 
        "IPv4Address": "192.168.1.3" 
       }, 
       "Links": null, 
       "Aliases": [ 
        "42**" 
       ], 
       "NetworkID": "4q***", 
       "EndpointID": "4c***503", 
       "Gateway": "", 
       "IPAddress": "192.168.1.3", 
       "IPPrefixLen": 24, 
       "IPv6Gateway": "", 
       "GlobalIPv6Address": "", 
       "GlobalIPv6PrefixLen": 0, 
       "MacAddress": "02:4***" 
      } 
+0

你能从节点卷曲ipinfo.io吗?还有你在安全组中打开的所有端口? –

+0

@TarunLalwani'curl ipinfo.io'也不能在容器内工作......我可以从EC2主机执行这些命令,但不能在容器内执行......类似普通的“ping www.google.com”或“ ping 8.8.8.8'命令在EC2主机上工作,但不在容器内部工作。 –

我回答敲我的问题,因为我发现这种行为的原因是我的自定义厨师食谱码头安装。我在docker config中设置了iptables = false,因此它不适用于除主机网络模式以外的任何docker容器。

我从Bret(Docker社区的Docker冠军)那里得到了以下建议,这帮助我找到了问题的根源。简而言之,这是我做错事情的一个问题,但是在下面发布以下建议以防将来解决此类问题。

嘿马尼什,

建议:得到一个容器尝试之前不群或覆盖正常工作。

所以你应该可以只运行docker --rm nginx:alpine ping 8.8.8.8并获得响应。

验证该主机上的容器是否有通往互联网的路径。

然后尝试docker run --rm nginx:alpine ping google.com并得到响应。

验证DNS解析正在工作。

*然后你可以尝试在单个节点群的一个节点上创建一个覆盖网络:*

*泊坞窗群初始化*

*搬运工网络创建--driver覆盖 - 附我的网*

*搬运工运行--rm --network我的网nginx的:高山平google.com *

这说明它们有互联网和覆盖网络上的DNS。

如果再添加多个节点和有问题,那么你可能需要确保所有群节点可以根据创建3相商群端口,你会发现一个链接到该群科防火墙端口列​​表节点群集资源。