← 中文资源

简体中文版本

Docker Compose 服务无法解析另一服务名

通过把服务放在共享网络、使用匹配的名称与正确引用,修复 Compose 的服务解析。

阅读英文原文

症状

某服务以 Could not resolve host 之类的消息无法解析另一服务名。在 Compose 中,服务发现依赖共享网络,每个服务名解析到其容器。若服务在不同网络上,或客户端使用 localhost 而非服务名,DNS 无记录可返回,连接在任何端口被访问前就失败。

诊断

用 docker network inspect 查看网络成员;在容器内用 getent hosts 测试解析;改为使用服务名。

docker compose ps ; docker network inspect <project>_default

根因

客户端无法解析另一服务,因为服务未接入共享网络或使用了错误的主机名,容器内的 DNS 没有可返回的记录。

修复

把服务接入共同网络——Compose 对单文件默认如此,但跨项目不会自动;用服务名引用对端;若使用外部网络则显式定义并让所有相关服务加入。

验证

重跑栈确认服务可解析并连接,并确认两个服务都列出了共享网络。名称解析成功且连接可用即证明网络对齐。

常见陷阱

用 localhost 引用同栈服务会指向容器自身而非对端;应始终使用服务名。