Docker swarm容器无法访问互联网

时间:2017-09-04 16:31:55

标签: amazon-web-services docker docker-swarm

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

在创建此故障单之前,我查看了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)网络而没有运气。

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

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

请注意,当我自己创建叠加网络时,我在create命令中添加了 - network my-overlay 选项。

关于我可能遗失/做错的任何指示?

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

1 个答案:

答案 0 :(得分:0)

我正在回答我的问题,因为我发现这种行为的原因是我的定制主厨装配码头安装。我在docker配置中设置iptables = false,因此它不适用于除主机网络模式之外的任何docker容器。

我从布雷特(Docker社区的Docker冠军)得到了以下建议,这帮助我找到了问题的根源。简而言之,这是一个我错误做错的问题,但是如果你想在将来解决这些问题,可以发布下面的建议。

嘿Manish,

建议:在尝试之前,让一个容器无法使用swarm或覆盖正常工作。

所以你应该能够直接运行--rm nginx:alpine ping 8.8.8.8并获得响应。

验证该主机上的容器是否可以访问互联网。

然后尝试使用docker run --rm nginx:alpine ping google.com并获得回复。

验证DNS解析是否有效。

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

* docker swarm init *

* docker network create --driver overlay --attachable mynet *

* docker run --rm --network mynet nginx:alpine ping google.com *

验证他们在覆盖网络上有互联网和DNS。

如果您随后添加多个节点并遇到问题,那么您可能需要确保所有群集节点都可以通过群集端口进行通信,您可以在“群集”部分的“创建3”下找到指向防火墙端口列​​表的链接-Node Swarm Cluster资源。