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/
找到
如何在 /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
我没有找零(新名称服务器)...所以我尝试使用
添加 mannualydocker 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
)
因此,将新 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/