Docker容器在boot2docker中不使用主机DNS

时间:2014-06-30 15:40:42

标签: dns docker boot2docker

我正在Mac上运行boot2docker。 OSX版本10.9.3 boot2docker版本4.3.12 Docker版本0.12.0

boot2docker图像是一个使用virtualbox的流浪盒。我尝试过一些流浪盒(例如stigkj / boot2docker)。所有人都表现出这个问题。

如果我进入boot2docker映像并查看/etc/resolv.conf,则使用名称服务器10.0.2.3。

我使用以下命令启动一个简单的docker镜像:

docker run -i -t ubuntu /bin/sh

查看该容器中的/etc/resolv.conf,它使用8.8.8.8和8.8.4.4作为名称服务器。

在boot2docker vm的docker.log文件中,有这一行:

2014/06/30 15:25:01 Local (127.0.0.1) DNS resolver found in resolv.conf and containers can't use it. Using default external servers : [8.8.8.8 8.8.4.4]

根据我的理解,docker应该使用主机的名称服务器。仅当主持人使用127.0.0.1作为其名称服务器时,它才应默认为谷歌名称服务器作为备份。

主机没有使用127.0.0.1作为名称服务器,但看起来docker认为它是。有关如何让它正确检测名称服务器的任何建议吗?

2 个答案:

答案 0 :(得分:8)

我找到了解决办法。 似乎boot2docker映像在从主机提取DNS之前运行docker守护程序。所以boot2docker认为DNS在启动时设置为127.0.0.1,然后机器将其更改为正确的名称服务器。

修复是在映像启动后重新启动docker守护程序。 在vagrant中,我通过在我的Vagrantfile中的适当位置添加以下命令来完成此操作:

config.vm.provision :shell, inline: "/etc/init.d/docker restart"

看起来这是boot2docker中的已知问题,将在即将推出的版本中修复: https://github.com/boot2docker/boot2docker/issues/357

答案 1 :(得分:2)

对@oillio的问题链接和内部讨论表示赞同。

在Windows 7环境中也使用boot2docker 1.0.1,我遵循https://github.com/boot2docker/boot2docker/issues/357中的建议

$ sudo udhcpc   # refresh the DHCP 
$ sudo /etc/init.d/docker restart # restart the service