让 DNS 在 Docker 容器中永久存在

让 DNS 在 Docker 容器中永久存在

我有container1,我已经编辑/etc/resolv.conf并放入nameserver 8.8.8.8ping google.com.效果很好。但是当我使用以下命令重新启动 Docker 的容器时,我需要使其永久化

sudo docker restart container1

我无法再通过我的容器 ping google.com。

笔记:

我已经尝试过他们 3-7 年前在这里发布的内容。这不起作用。我的 Ubuntu 版本是 18.04。

答案1

如下所述DNS服务,容器默认从主机继承resolv.conf文件。

[root@testvm ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1

[root@testvm ~]# docker run -it ubuntu bash

root@a0a0d88f6db8:/# mount|grep resolv.conf
/dev/mapper/centos-root on /etc/resolv.conf type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

root@79c567a830b4:/# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1

要在容器内添加 DNS 名称服务器配置,您有两个选择:

  1. 将 DNS 名称服务器添加到主机上的 resolv.conf 文件中。
  2. 使用一个或多个选项启动容器--dns,显式指定 DNS 名称服务器。

这是--dns正在使用的选项:

[root@testvm ~]# docker run -it --dns 8.8.8.8 --dns 8.8.4.4 ubuntu bash
root@3ae155186997:/# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

此选项在重新启动后也会保留,如下面的 nginx 图像所示:

[root@testvm ~]# docker run -d -p 8080:80 --dns 8.8.8.8 --dns 8.8.4.4 nginx
97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36

[root@testvm ~]# docker exec -it 97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36 bash

root@97f76bedfad8:/# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

root@97f76bedfad8:/# exit
exit

[root@testvm ~]# docker restart 97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36
97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36

[root@testvm ~]# docker exec -it 97f76bedfad8173bb38e4e83f898b61be6c8587775736576d09c94ebaf5d5d36 bash
root@97f76bedfad8:/# cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

相关内容