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

3pmvbmvn  于 2023-02-03  发布在  Docker
关注(0)|答案(3)|浏览(190)

我正在尝试在AWS中设置群群集,但是主机中的容器无法访问Internet。用于地址解析或通过IP直接连接的ping命令在容器内部不起作用。
在创建此票证之前,我查看了此问题,但我认为在我的案例中没有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***"
            }
k2fxgqgv

k2fxgqgv1#

我回答我的问题,因为我发现这个行为的原因是我的定制厨师食谱docker安装.我设置iptables=假在docker配置,因此它是不工作的任何docker容器,除了那些在主机网络模式.
我从Bret( Docker 社区的 Docker 冠军)那里得到了以下建议,帮助我找到了问题的根源。总之,这是我做错了什么,但是如果你想在未来解决这样的问题,请在下面发布建议。

  • 曼尼什 *
  • 建议:在尝试之前,请先让单个容器在没有群集或覆盖的情况下正常工作。*
  • 所以你应该能够运行docker--rm nginx:alpine ping8.8.8.8并得到响应。*
  • 这验证了该主机上的container可以访问Internet。*
  • 然后尝试docker run --rm nginx:alpine pinggoogle.com并获得响应 *
  • 验证DNS解析是否正常工作。*
  • 然后,您可以尝试在单个节点群 * 中的一个节点上 * 创建单个覆盖网络:*
  • 码头群初始化 *
  • Docker网络创建--驱动程序覆盖--可连接的mynet *
  • 码头运行--rm --网络mynet nginx:阿尔卑斯平google.com*
  • 这验证了他们在覆盖网络上有互联网和DNS。*
  • 如果您随后添加了多个节点并遇到问题,则可能需要确保所有群节点都可以通过群端口进行通信,您可以在创建3节点群群集资源下的群部分中找到防火墙端口列表的链接。*
yuvru6vn

yuvru6vn2#

正如Manish所说,首先尝试ping没有覆盖网络的公共网络:

docker run --rm nginx:alpine ping 8.8.8.8

如果它不工作,那么你有一个防火墙或其他东西的问题.在我的情况下,iptables防火墙限制DOCKER-USER链获得访问公共网络.所以我已经刷新了所有的DOCKER规则:

sudo iptables -F DOCKER-USER

然后重新初始化:

sudo iptables -I DOCKER-USER -i eth0 -s 0.0.0.0/0 -j ACCEPT
6rqinv9w

6rqinv9w3#

我也遇到过类似的问题,可以通过配置/etc/docker目录中的daemon.json文件来解决。如果下面的行还没有出现,请添加它们。

"iptables":true,
   "dns": ["8.8.8.8", "8.8.4.4"]

daemon.json文件应如下所示

{
   "labels": ....,
   "data-root": ....,
   "max-concurrent-downloads": ....,
   "iptables":true,
   "dns": ["8.8.8.8", "8.8.4.4"]
}

然后重新启动Docker服务

sudo service docker restart

相关问题