【发布时间】:2020-08-17 00:46:57
【问题描述】:
我刚刚在 CentOS 8 上安装了 Docker。一切都很好,我已经运行了 hello_world 测试容器,结果是成功的。问题是在容器内我无法解析任何 DNS 查询。
例如,当我键入 ping 8.8.8.8(在任何类型的基础容器上,例如 Ubuntu 或 CentOS)时,我得到了正确的答案,但是当我尝试运行 ping google.com 时,我没有得到任何答案,这意味着容器无法解析任何 URL 的 DNS。
我也试过像这样运行一个基础容器:
docker run busybox ping -c 1 192.203.230.10
我得到了这个(正确的)输出:
[server@localhost ~]$ docker run busybox ping -c 1 192.203.230.10
PING 192.203.230.10 (192.203.230.10): 56 data bytes
64 bytes from 192.203.230.10: seq=0 ttl=51 time=32.413 ms
--- 192.203.230.10 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 32.413/32.413/32.413 ms
但现在尝试使用以下命令解析域 google.com:
docker run busybox nslookup google.com
我得到这个输出:
[server@localhost ~]$ docker run busybox nslookup google.com
nslookup: write to '8.8.8.8': No route to host
nslookup: write to '8.8.4.4': No route to host
;; connection timed out; no servers could be reached
我发现这个问题真的很令人沮丧,因为我还没有找到解决它的方法。为了完整起见,我附上了运行 Docker 的机器和容器本身的cat /etc/resolv.conf
在装有 CentOS 8 的机器上:
[server@localhost ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
在任何 Docker 容器内:
bash-4.4# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4
这看起来像是一个正常且有效的配置,但是当我尝试 ping google.com(在容器内)时,我得到:
bash-4.4# ping google.com
ping: google.com: Try again
我可以尝试哪些新事物?
【问题讨论】:
-
我猜this is the issue。来自此来源:不鼓励禁用关键安全功能。但是,CentOS 8 中的 firewalld 管理器阻止了 Docker 容器内的 DNS 解析。本教程包含有关如何禁用 firewalld 的说明。
-
非常感谢@halfer,看来您的解决方案有效!但我想知道为什么要使 DNS 系统正常工作需要如此残酷的做法。没有其他方法可以绕过/添加防火墙规则以“忽略”docker吗?我现在在防火墙后面,所以我认为现在这不是问题,但在实际生产环境中,这可能是一个大问题。让我知道!再次感谢!
-
我相信这是 Centos 问题,而不是 Docker 问题。 Docker 只能做主机操作系统允许的事情,而 Centos(故意)被完全锁定。你可以使用不同的操作系统吗? DNS 在 Ubuntu 中开箱即用的容器中工作。
-
在回答您的问题时,我想防火墙规则是可能的,是的。不过我不使用 Centos,所以你必须做一些进一步的搜索。
-
我使用的是 Ubuntu Server 20.04 但我想尝试 CentOS,我对它有点新手,但我正在努力学习,无论如何我会对此进行进一步研究“问题”,看看我是否可以添加一些规则来“解锁” CentOS 上的 docker 界面
标签: docker networking centos centos8