Docker 使用新的名称服务器

Docker with a new nameserver

如何在 /etc/resolv.conf(docker 文件)中添加新的名称服务器?

在我的 docker 文件中,我使用:

FROM ubuntu:14.04

RUN echo "nameserver 10.111.122.1" >> /etc/resolv.conf

在我的测试中我使用:

docker run --rm 746cb98d6c9b echo cat /etc/resolv.conf

我没有找零(新名称服务器)...所以我尝试使用

添加 mannualy
docker run --rm 746cb98d6c9b echo "nameserver 10.111.122.1" >> /etc/resolv.conf 

我得到

zsh: permission denied: /etc/resolv.conf

如何更改此文件的权限或使用 root 用户或在 docker 文件中使用 chmod?我的真正任务是为这个 docker 文件的构建添加 dns 服务器。

我正在使用 linux mint。

我在 docker 运行 命令(使用 --dns

上进行 ping 测试得到了正确的结果

因此,将新 DNS 信息添加到容器的构建过程的方法之一是向 Docker 守护程序添加一些启动选项。该过程的 The documentation 表明您将使用的选项是 --dns。配置文件的位置取决于您的特定发行版。在我的 Linux Mint 机器上,文件在 /etc/default/docker 中。在 Linux Mint 上,查找 DOCKER_OPTS= 行,然后向该行添加适当的 --dns=x.x.x.x 条目。

例如,如果您想使用 Google 的 DNS,您应该将该行更改为如下所示:

DOCKER_OPTS="--dns=8.8.4.4 --dns=8.8.8.8"

此外,在缺少 --dns--dns-search 启动选项的情况下,Docker 将使用 运行 所在主机的 /etc/resolv.conf

Docker 容器的 DNS 配置可以在容器创建期间进行调整,不需要在 Docker 图像本身中进行硬编码。

通过提供 --dns 参数将单个 DNS 服务器传递给容器:

$ docker run --rm --dns=8.8.8.8 <image>

您可以自由提供多个 DNS 服务器,您还可以定义其他 DNS 相关选项,如 DNS 搜索名称或常用 DNS 选项:

$ docker run --rm --dns=8.8.8.8 --dns=8.8.4.4 --dns-search=your.search.domain --dns-opt=timeout:50 <image>

如果您将 cat /etc/resolv.conf 作为命令传递给您的容器,您可以轻松验证传递的 DNS 配置选项是否已进入容器的 DNS 配置:

$ docker run --rm --dns=8.8.4.4 --dns=8.8.8.8 --dns-search=your.domain.name --dns-opt=timeout:50 alpine cat /etc/resolv.conf

search your.domain.name
nameserver 8.8.4.4
nameserver 8.8.8.8
options timeout:50

另请参阅 docker run 配置,可在 https://docs.docker.com/engine/reference/commandline/run/

找到