Docker从入门到精通——为Docker指定DNS服务器
为Docker指定DNS服务器
如果您的容器需要解析网络内部的主机,那么公共名称服务器就不够用了。你有两个选择:
-
- 您可以指定 Docker 使用的 DNS 服务器,或者
dnsmasq
您可以在 NetworkManager 中禁用。如果您这样做,NetworkManager 会将您真正的 DNS 名称服务器添加到/etc/resolv.conf
,但您会失去dnsmasq
.
您只需要使用其中一种方法。
一、为Docker指定DNS服务器
配置文件的默认位置是/etc/docker/daemon.json
. --config-file
您可以使用 daemon 标志更改配置文件的位置。下面的文档假定配置文件位于/etc/docker/daemon.json
.
-
创建或编辑 Docker daemon 配置文件,默认为
/etc/docker/daemon.json
file,控制 Docker daemon 配置。sudo nano /etc/docker/daemon.json
-
添加
dns
具有一个或多个 IP 地址作为值的键。如果文件已有内容,您只需添加或编辑该dns
行。{ "dns": ["8.8.8.8", "8.8.4.4"] }
如果您的内部 DNS 服务器无法解析公共 IP 地址,请至少包含一个可以解析的 DNS 服务器,以便您可以连接到 Docker Hub,以便您的容器可以解析 Internet 域名。
保存并关闭文件。
-
重新启动 Docker 守护程序。
sudo service docker restart
-
验证 Docker 是否可以通过尝试拉取镜像来解析外部 IP 地址:
docker pull hello-world
-
如有必要,验证 Docker 容器是否可以通过 ping 解析内部主机名。
docker run --rm -it alpine ping -c4 <my_internal_host> PING google.com (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms 64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms 64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms 64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
二、禁用dnsmasq
1) Ubuntu
如果您不想更改 Docker 守护程序的配置以使用特定 IP 地址,请按照这些说明dnsmasq
在 NetworkManager 中禁用。
-
编辑
/etc/NetworkManager/NetworkManager.conf
文件。 -
dns=dnsmasq
通过在行首添加一个#
字符来注释掉该行。dns=dnsmasq
保存并关闭文件。
-
重新启动 NetworkManager 和 Docker。作为替代方案,您可以重新启动系统。
sudo systemctl restart network-manager sudo systemctl restart docker
2) RHEL、CentOS 或 Fedora
dnsmasq
要在 RHEL、CentOS 或 Fedora 上禁用:
-
禁用
dnsmasq
服务:sudo systemctl stop dnsmasq sudo systemctl disable dnsmasq
-
使用Red Hat 文档手动配置 DNS 服务器。