【问题标题】:Docker containers not using host DNS in boot2dockerDocker 容器未在 boot2docker 中使用主机 DNS
【发布时间】:2014-08-21 01:10:00
【问题描述】:

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

boot2docker 镜像是一个 vagrant box,使用 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 作为名称服务器。

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

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

【问题讨论】:

标签: dns docker boot2docker


【解决方案1】:

我找到了解决办法。 似乎 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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多