【问题标题】:Why Docker container doesnt resolve hosts as defined in /etc/hosts on Host machine?为什么 Docker 容器不解析主机上 /etc/hosts 中定义的主机?
【发布时间】:2017-09-14 05:46:37
【问题描述】:

我在两台不同的主机上创建了一些 Docker 容器,MAC OSX 和 Ubuntu 16.04

每台主机都通过 HTTP 正确地为它们提供服务。 当我需要托管容器在 Ubuntu 上相互解决时,问题就来了。 (在 Mac osx 上一切正常)

在两台主机上,我都编辑了 /etc/hosts 文件,例如:

192.168.0.13 mycontainer01.dev
192.168.0.13 mycontainer02.dev
192.168.0.13 mycontainer03.dev

(在第二台主机上我显然有其他IP)

如果我从(外部)每台主机上 ping mycontainer01.dev,我会得到主机文件中定义的正确 IP。

但是如果我进入nginx容器:

docker-compose exec nginx  bash

在 macosx 上 ping mycontainer01.dev 会成功

在 Ubuntu 上会返回错误: $ ping myconteiner01.dev

ping:错误地址

【问题讨论】:

    标签: ubuntu docker hosts


    【解决方案1】:

    因为您无法访问 docker 容器内主机上的 /etc/hosts 文件。

    【讨论】:

    • 如果是这样...为什么它可以在我的 MacOSX 主机上运行?
    • 因为 MacOS X 使用 DNS 缓存(并且您需要在 MacOS X 下编辑 /etc/hosts 后清除它):tekrevue.com/tip/edit-hosts-file-mac-os-x 在 Linux 下(在大多数发行版上)您没有 DNS 缓存:@ 987654322@
    • - 首先:using DNS caching on linux - 在 docker 容器中添加 /etc/hosts。 - 在 docker 容器内挂载主机 /etc 目录(不好的方式)。
    • 或者在容器内映射/etc/hosts:docker run -v /etc/hosts:/etc/hosts <yourimage>
    • 也可能是一个很好的解决方案。您可以从主机的 /etc/hosts 生成它。
    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 2019-03-26
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多