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