如何在/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
)
答案 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
参数:
$ 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
配置