docker - docker swarm中的容器无法解析外部地址的dns

标签 docker docker-swarm

在研究了这个问题很长时间之后,仍然在努力寻找解决方案。朝正确方向的任何指针将不胜感激。
主机操作系统-CentOS 8.使用VMWare Fusion Pro,VM位于NAT之后。为简单起见,没有工作节点,只有一个管理节点。
在我的CentOS 8 VM上创建了swarm服务,如下所示-

docker service create  -d -p 80:80 nginx
服务已成功创建,我可以看到nginx主页。
但是,我不能从容器内部执行curl google.com
以下是一些事实和我失败的尝试-
我已经将/etc/docker/daemon.json更改为包含以下内容,然后重新启动docker服务-
{
    "dns": ["8.8.8.8"]
}
如果我创建了可以正确解析dns的单个docker容器(docker容器运行..),那我没有问题。请参阅以下代码段-
root@e180d56ab94a:/# cat /etc/resolv.conf 
search localdomain
nameserver 8.8.8.8
root@e180d56ab94a:/# curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
但是从docker服务创建的容器不执行dns解析。
我的主机IP是192.168.112.135,我的主机的resolv.conf说名称服务器是192.168.112.2,我的容器的IP是10.0.0.14。因此,我猜这里没有IP重叠,因此可以排除在该线程https://github.com/moby/moby/issues/27399中发现问题的可能性。
我的主机的resolv.conf看起来像这样-
$ cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.112.2
基于What is overlay network and how does DNS resolution work?,我也尝试了以下操作,但无济于事-
docker service create --dns 192.168.112.2  -d -p 80:80 nginx
docker 检查容器显示以下片段
:
:
"DNSConfig": {
                 "Nameservers": [
                            "192.168.112.2"
                        ]
                    },
:
:
但这也不起作用。
这项工作也没有
docker service create --dns 8.8.8.8  -d -p 80:80 nginx
我已经允许docker0通过防火墙-
$ sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0

$ sudo firewall-cmd --reload
如果在AWS的EC2实例上运行相同的命令,则容器可以毫无问题地解析dns。
该问题可以在我的VM上重现。还尝试了不同的安装-CentOS 8最小安装以及完整安装。
已经完成了许多次-重新启动了docker服务,网络,主机,使节点离开了群集,并重新群集了。
我想念什么?

最佳答案

这对我有用
查看此链接。
问题出在centos8 Firewalld,因为它默认将FirewallBackend设置为nftables。将其更改为iptables起作用。
https://github.com/docker/for-linux/issues/957#issuecomment-627166787

关于docker - docker swarm中的容器无法解析外部地址的dns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64494829/

相关文章:

docker - 我如何在 docker 构建过程中传递参数或绕过它?

docker - 无法使用 docker 堆栈分配网关

docker - 在Docker容器之间复制数据

postgresql - 在 Docker 容器内运行 `mkdir` 时权限被拒绝

apache-spark - 在 docker 堆栈之间共享卷?

docker stack rm 后跟 deploy 失败并在连续构建上运行

postgresql - flyway 无法连接到 docker-entrypoint-initdb.d 脚本中的 postgres 容器

docker - 并不总是创建中间容器

docker - "debconf: delaying package configuration, since apt-utils is not installed":> google notebooks bash error

docker - 容器无法连接