一尘不染

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

docker

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

boot2docker映像是一个使用virtualbox的无聊的盒子。我尝试了许多无用的盒子(例如stigkj /
boot2docker)。他们都表现出这个问题。

如果我将ssh放入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作为名称服务器。

docker.logboot2docker vm上的文件中,有以下行:

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作为其名称服务器时,才应默认使用google名称服务器作为备份。

主机未使用127.0.0.1作为名称服务器,但似乎docker认为是这样。关于如何获取它以正确检测名称服务器的任何建议?


阅读 291

收藏
2020-06-17

共1个答案

一尘不染

我找到了解决方法。似乎boot2docker映像在从主机提取DNS之前先运行docker守护程序。因此,boot2docker认为在引导时将DNS设置为127.0.0.1,然后计算机将其更改为正确的名称服务器。

解决方法是在映像启动后重新启动docker守护程序。在流浪汉中,我通过在Vagrantfile中的适当位置添加以下命令来做到这一点:

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

看来这是boot2docker中的一个已知问题,将在即将发布的版本中修复:https
:
//github.com/boot2docker/boot2docker/issues/357

2020-06-17