Docker 内部 DNS 解析是如何工作的 | AI生成和翻译
就是这样。这是它的工作原理:
容器中的 /etc/hosts
容器的自身主机名 (32bb25fb32c8) 与其每个连接网络的所有 IP 一起列出。但是 LibreChat 不在 /etc/hosts 中。
那么它是如何解析的?
-
/etc/resolv.conf指向nameserver 127.0.0.11— 那是 Docker 的 embedded DNS resolver,运行在每个容器的 network namespace 中。 -
当你对
LibreChat执行 DNS lookup 时,它会转到127.0.0.11,那是 Docker 的 DNS。Docker 知道每个网络上的所有容器 — 当你执行docker network connect librechat_default uptime-kuma时,DNS resolver 现在在该共享网络上看到LibreChat并返回其 IP (172.18.0.6)。 -
如果容器不在
librechat_default上,Docker 的 DNS 将 不知道LibreChat,lookup 将失败 — 正好是之前发生的情况。
TL;DR: 不是 /etc/hosts。是 Docker 在 127.0.0.11 的 internal DNS 来解析容器名称,只有当两个容器共享至少一个网络时才有效。