【问题标题】:How to resolve docker host names (/etc/hosts) in containers如何解析容器中的 docker 主机名(/etc/hosts)
【发布时间】:2017-03-29 19:12:23
【问题描述】:

如何解析容器中 Docker 主机的 /etc/hosts 中定义的名称? 在我的 Docker 主机中运行的容器可以解析公共名称(例如 www.ibm.com),因此 Docker dns 工作正常。 我想从容器中解析来自 Docker 主机的名称(例如 127.17.0.1 smtp)。

我的最终目标是从容器连接到在 Docker 主机(例如 smtp 服务器)中运行的服务。我知道我可以使用容器中的 Docker 主机 IP (127.17.0.1),但我认为 Docker 也会使用 Docker 主机 /etc/hosts 来构建容器的解析文件。

我什至很确定我在不久前看到过这个工作......但我可能错了。

有什么想法吗?

乔瓦尼

【问题讨论】:

标签: docker


【解决方案1】:

查看docker 命令的--add-host 标志:https://docs.docker.com/engine/reference/run/#managing-etchosts

$ docker run --add-host="smtp:127.17.0.1" container command

在 Docker 中,/etc/hosts 不能在运行时被覆盖或修改(安全功能)。您需要使用 Docker 的 API,本例中为 --add-host 来修改文件。

对于docker-compose,使用extra_hosts 选项。

对于整个“连接到主机中运行的服务”问题,请参阅此 GitHub 问题中的讨论:https://github.com/docker/docker/issues/1143

解决这个问题的常用方法是使用--add-host 和 Docker 的主机网关地址,例如--add-host="dockerhost:172.17.42.1"。检查上面的问题以找到一些找到正确 IP 并启动容器的脚本。

【讨论】:

    【解决方案2】:

    您可以在主机上设置简单的 DNS 服务器,并在容器中设置 /etc/resolve.conf 到 Docker 主机 DNS 服务器。

    例如在dnsmasq 中,您可以将addn-hosts=/etc/hosts 添加到配置文件中。所以容器,通过使用 Docker 主机 DNS 服务器,将能够解析主机 /etc/hosts。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-13
      • 2017-09-14
      • 2019-03-26
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多