我有container1,我已经编辑/etc/resolv.conf
并放入nameserver 8.8.8.8
了ping 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 名称服务器配置,您有两个选择:
- 将 DNS 名称服务器添加到主机上的 resolv.conf 文件中。
- 使用一个或多个选项启动容器
--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