无法从同一网络中的另一个 docker 容器解析设置的主机名

Eug*_*ene 2 docker

我有 db 和 server 容器,它们都在同一个网络中运行。可以通过其容器 ID ping db 主机没有问题。当我手动为 db 容器设置主机名 ( -h myname) 时,它产生了效果($ hostname返回设置主机),但我无法从同一网络中的另一个容器 ping 那个主机名。容器 ID 仍然可以 ping 通。虽然它在 docker compose 中没有问题。我错过了什么?

BMi*_*tch 5

docker 的内置 DNS 服务不使用主机名。这是一个违反直觉的例外,但由于主机名可以在 docker 控制之外更改,因此它是有道理的。Docker 的 DNS 将解析:

  • 容器标识
  • 容器名称
  • 您为该网络上的容器定义的任何网络别名

这些选项中最简单的是最后一个,它是在运行带有 compose 文件的容器时自动配置的。服务名称本身是一个网络别名。这使您无需重新配置其他容器即可扩展和执行滚动更新。

您需要在用户创建的网络上,而不是像禁用 DNS 的默认网桥那样的网络。这是在运行带有撰写文件的容器时默认完成的。

避免使用链接,因为它们已被弃用。而且我只建议为不在任何 DNS 中的外部静态主机、容器到容器或访问 docker 之外的其他主机添加主机条目,DNS 是首选。