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

我正在尝试在AWS中设置swarm群集,但主机中的容器无法访问互联网。 通过IP地址parsing或直接连接的ping命令不能在容器内工作。

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

我有以下configuration:

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 

我也尝试创build新的覆盖(192.168.1.0/24)和docker_gwbridge(10.11.0.0/16)networking没有运气。

我正在使用这些选项创build服务(删除挂载和env参数):

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

请注意当我自己创build覆盖networking时,我正在添加选项–network my-overlay以及create命令。

任何指针,我可能会错过/做错了什么?

编辑1添加更多信息

下面是容器的检查,当我不创build一个新的覆盖networking,并使用默认的:

 "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***" } 

下面是从我创build覆盖networking时:

 "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***" } 

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

我从Bret(Docker社区的Docker冠军)得到了以下build议,这帮助我find了问题的根源。 简而言之,这是我做错事情的一个问题,不过,如果您想在将来解决这些问题,请在下面发表以下build议。

嘿Manish,

build议:在尝试之前,让一个容器正确工作,不要使用群集或覆盖层。

所以你应该只需要docker run –rm nginx:alpine ping 8.8.8.8并得到响应。

这证实该主机上的容器有通往互联网的途径。

然后尝试docker运行–rm nginx:高山平google.com和得到一个回应。

validationDNSparsing正在工作。

*然后,您可以尝试在单个节点群中的一个节点创build单个覆盖networking:*

* docker swarm init *

*dockernetworking创build – 驱动程序覆盖 – 可连接的mynet *

*docker运行 – rm – networkingmynet nginx:高山平google.com *

这validation了他们有一个覆盖networking上的互联网和DNS。

如果添加了多个节点并出现问题,那么您可能需要确保所有群集节点都可以通过群集端口进行通信,您可以在创build3节点群集资源下的“群集部分”中find指向防火墙端口列​​表的链接。