Firewalld 阻止了 Docker 默认网络接口的 DNS 请求,导致容器运行时无法解析域名

  • Post author:
  • Post category:其他


主机环境:

[root@appsrv ~]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
[root@appsrv ~]# docker --version
Docker version 19.03.8, build afacb8b
[root@appsrv ~]# firewall-cmd --version
0.7.0

[root@appsrv ~]# yum info docker-ce
上次元数据过期检查:0:00:36 前,执行于 2020年04月28日 星期二 17时06分01秒。
已安装的软件包
名称         : docker-ce
时期         : 3
版本         : 19.03.8
发布         : 3.el7
架构         : x86_64
大小         : 104 M
源           : docker-ce-19.03.8-3.el7.src.rpm
仓库         : @System
来自仓库     : docker-ce-stable

[root@appsrv ~]# yum info firewalld
CentOS-8 - AppStream                                                                                                  1.4 kB/s | 4.3 kB     00:03
CentOS-8 - Base                                                                                                       7.1 kB/s | 3.9 kB     00:00
CentOS-8 - Extras                                                                                                     2.8 kB/s | 1.5 kB     00:00
Docker CE Stable - x86_64                                                                                             557  B/s | 3.5 kB     00:06
已安装的软件包
名称         : firewalld
版本         : 0.7.0
发布         : 5.el8_1.1
架构         : noarch
大小         : 1.9 M
源           : firewalld-0.7.0-5.el8_1.1.src.rpm
仓库         : @System
来自仓库     : BaseOS

默认的 container 使用 –net=bridge 模式,挂到虚拟的网段中,可以从主机的虚拟网络接口 docker0 (默认 IP:172.17.0.1)访问外网。

结果在 container 中,/etc/resolv.conf 配置的 DNS 没问题,也能 ping 通 DNS 的 IP 地址,却无法 ping 通任意的域名,

提示错误:Name or service not known。

其它网络应用也可能会提示:

No route to host

bad address

Could not resolve host 等。

将网络接口 docker0 加入 trusted zone,解决 DNS 问题

[root@appsrv ~]# firewall-cmd --permanent --zone=trusted --add-interface=docker0
success
[root@appsrv ~]# firewall-cmd --reload
success



版权声明:本文为mostone原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。