首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试Docker Container不起作用的DNS?

如何调试Docker Container不起作用的DNS?
EN

Stack Overflow用户
提问于 2020-03-01 07:02:31
回答 1查看 2.4K关注 0票数 0

我开始使用Docker容器,但在从容器解析DNS时遇到问题。在StackOverflow上似乎有很多类似这个问题的问题,但我无法解决它。

我在CentOS Linux7.7.1908主机上。我已经在这台机器上构建了一个新的容器,并将其添加到现有的docker-compose.yml文件中。

但是我的容器中似乎缺少了一些东西-- DNS在其中不起作用。从docker-compose启动的其他容器没有这个问题。

在docker-compose中,我的新容器的开始部分和DNS工作的现有容器看起来是一样的,如下所示:

代码语言:javascript
复制
existingcontainer:
    image: johnson/job1:2.1.0
    environment:
        JAVA_OPTS: " -Xms256m -Xmx512m"
    ports:
        - 8090:8090

newcontainer:
    image: johnson/job2:1.0.0
    environment:
        JAVA_OPTS: " -Xms256m -Xmx512m"
    ports:
        - 8091:8090

容器启动,其中的功能都工作得很好,除了新的容器DNS不能工作之外。

代码语言:javascript
复制
docker container exec existingcontainer_1 ping google.com
PING google.com (172.217.12.238) 56(84) bytes of data.
...

docker container exec newcontainer_1 ping google.com
ping: google.com: Name or service not known

docker container exec newcontainer_1 ping 172.217.12.238
PING google.com (172.217.12.238) 56(84) bytes of data.
...

因此,DNS解析不能与新容器一起工作,但可以通过IP地址访问互联网。我的结论是容器中缺少一些配置。

代码语言:javascript
复制
docker container exec existingcontainer_1 cat /etc/hosts
127.0.0.1  localhost
::1   localhost ip6-localhost
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.15  2a51cabe0eaf

docker container exec newcontainer_1 cat /etc/hosts
127.0.0.1  localhost
::1   localhost ip6-localhost
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.11  0c73f229b689

docker container exec existingcontainer_1 cat /etc/resolv.conf
search ec2.internal
nameserver 127.0.0.11
options ndots::0

docker container exec newcontainer_1 cat /etc/resolv.conf
search ec2.internal
nameserver 127.0.0.11
options ndots::0    

DNS的网络配置看起来是一样的。

根据一些文章,我在docker.service文件中添加了以下ExecStart设置,以强制DNS服务器,然后重新启动docker和docker-compose容器:

代码语言:javascript
复制
--dns 8.8.8.8

但是我看到了同样的行为-- DNS在新的容器上不起作用。此外,由于DNS已经在一些容器中工作,但不是新容器,所以我认为正确的修复不是像那样的全局修复--似乎需要对新容器进行更改。

为了对容器进行故障排除,我还发现一些标准实用程序在容器环境中似乎不可用,比如netstat和iptables。我可能只需要将这些从主机复制到容器?

如何更好地调试它呢?

EN

回答 1

Stack Overflow用户

发布于 2020-06-13 09:33:44

我在Centos 8上也遇到过类似的问题。看起来在firewalld和docker之间有冲突。这里有一个reference。我禁用了firewalld,并允许在容器中查找DNS。不过,这似乎不是一个好的解决方案。需要弄清楚它的底端

……

下面的post解决了这个问题。

对centos 8防火墙所做的更改会覆盖iptables配置,从而中断docker网络。需要手动启用伪装。

代码语言:javascript
复制
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload
systemctl restart docker

为我解决了这个问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60470451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档