Docker容器不能访问本地networking的DNS
当build立一个docker镜像时,我有一个curl命令,可以像这样下拉文件:
RUN curl -L http://files.mycompany.com/ -o file.war
files.mycompany.com是只能从公司networking内访问的服务器。 我可以从我的主机到达这个服务器,但是如果我使用名字(IP工作正常),不能从docker容器中。
这工作: RUN ping google.com
这工作: RUN ping 10.3.2.1
10.3.2.1(files.mycompany.com的IP)
这是行不通的: RUN ping files.mycompany.com
(将该名称转换为另一个IP,如果我从主机ping同一台服务器)
由于在同一networking上构build来自另一台开发计算机的容器,因此某些东西在我的机器上安装不正确。 这就像docker接口不接收来自本地networking的DNSlogging?
我正在运行Ubuntu 17.04。
在你的主机上这样做:
cat /etc/resolv.conf
如果您看到类似127.0.0...
这意味着您的主机使用的DNSconfiguration是监听本地主机的守护进程。 Docker无法告诉你的容器使用相同的DNS,因为容器有它自己的localhost,所以docker默认使用Google DNS(8.8.8.8)。 您可以确认在容器内执行此操作: cat /etc/resolv.conf
我build议你在这里遵循步骤,所以编辑你的/etc/docker/daemon.json
,并把这个:
{"dns": ["your_dns_server_ip"]}
关于/etc/default/docker
:这个文件在最新的Ubuntu版本中不再使用。 相反,创build我指出的json文件。 请参阅文档 : /etc/docker/daemon.json