当前位置: 首页 > 面试题库 >

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

西门安宁
2023-03-14
问题内容

我在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认为是这样。关于如何获取它以正确检测名称服务器的任何建议?


问题答案:

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



 类似资料:
  • 在任何地方都没有找到答案...我使用docker机器创建了一个VM(boot2docker)。我需要使用root编辑一些文件。 boot2docker中的根密码是什么?

  • 问题内容: 假设我有一台服务器在OSX的8000端口上运行。我的Docker容器如何通过访问它?由于容器中的应用程序不在我的控制范围内,因此我也无法更改主机名。 我已经阅读了前面有关使用容器访问主机网络的讨论。但是,我在OSX上,并且Docker在VM内运行,因此Docker容器中的 localhost转到了VM,而不是我的真实机器。 然后,我尝试像这样的端口转发解决方法:无济于事。 任何建议将不

  • 问题内容: 我在组成2.9(在yml版本2.1中)的“自定义”桥网络中的“ Ubuntu 16.10服务器”上运行多个容器。我的大多数容器在内部都使用相同的端口,因此我无法使用“主机”网络驱动程序。我的容器都是通过专用属性链接在一起的。 但是,我还需要访问容器外部公开的服务。这些服务具有专用URL,其名称已在我公司的DNS服务器中注册。虽然我可以使用公共DNS并从容器中访问任何公共服务没有问题,但

  • 问题内容: 我正在开发服务,并在那里使用docker compose来旋转诸如postgres,redis,elasticsearch之类的服务。我有一个基于RubyOnRails的Web应用程序,并从所有这些服务中进行读写操作。 这是我的 我可以在此网络中ping容器 到目前为止,一切都很好。现在我想在主机上的Rails应用程序上运行ruby,但是能够像目前这样使用url访问postgres实例

  • 问题内容: 我找不到这个问题的直接答案,但是这里是: 假设我有一台主机,最多可打开1024个文件: 和在该主机中运行的docker容器,其中包含: 如果我尝试打开1024个以上的文件,那么容器中会有问题吗?我认为在这种情况下,容器的实际限制将是1024个文件。你怎么看? 问题答案: 虽然有点晚,但我只想清除对ulimit差异的怀疑。 如果在运行容器时确实设置了该值,则容器内显示的ulimit值来自