我开始使用Docker容器,但在从容器解析DNS时遇到问题。在StackOverflow上似乎有很多类似这个问题的问题,但我无法解决它。
我在CentOS Linux7.7.1908主机上。我已经在这台机器上构建了一个新的容器,并将其添加到现有的docker-compose.yml文件中。
但是我的容器中似乎缺少了一些东西-- DNS在其中不起作用。从docker-compose启动的其他容器没有这个问题。
在docker-compose中,我的新容器的开始部分和DNS工作的现有容器看起来是一样的,如下所示:
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不能工作之外。
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地址访问互联网。我的结论是容器中缺少一些配置。
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容器:
--dns 8.8.8.8但是我看到了同样的行为-- DNS在新的容器上不起作用。此外,由于DNS已经在一些容器中工作,但不是新容器,所以我认为正确的修复不是像那样的全局修复--似乎需要对新容器进行更改。
为了对容器进行故障排除,我还发现一些标准实用程序在容器环境中似乎不可用,比如netstat和iptables。我可能只需要将这些从主机复制到容器?
如何更好地调试它呢?
发布于 2020-06-13 09:33:44
https://stackoverflow.com/questions/60470451
复制相似问题