首页 > 解决方案 > 无法从同一网络中的另一个 docker 容器解析设置主机名

问题描述

我有数据库和服务器容器,它们都在同一个网络中运行。可以通过容器 id ping db 主机没有问题。当我手动为 db 容器设置主机名时-h myname$ hostname容器 id 仍然可以 ping 通。虽然它在 docker compose 中没有问题。我错过了什么?

标签: docker

解决方案


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

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

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

您需要在用户创建的网络上,而不是在禁用 DNS 的默认网桥上。默认情况下,这是在使用 compose 文件运行容器时完成的。

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


推荐阅读