Docker使用新的名称服务器

时间:2016-04-01 17:14:50

标签: docker dockerfile

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

在我的dockerfile上,我使用:

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?我真正的任务是为我的这个dockerfile构建添加和dns服务器。

我正在使用linux mint。

我在docker run命令上使用ping测试得到了正确的结果(--dns

2 个答案:

答案 0 :(得分:1)

因此,您可以向容器的构建过程添加新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

答案 1 :(得分:1)

可以在创建容器期间调整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

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

找到的docker run配置