症状
某服务以 Could not resolve host 之类的消息无法解析另一服务名。在 Compose 中,服务发现依赖共享网络,每个服务名解析到其容器。若服务在不同网络上,或客户端使用 localhost 而非服务名,DNS 无记录可返回,连接在任何端口被访问前就失败。
诊断
用 docker network inspect 查看网络成员;在容器内用 getent hosts 测试解析;改为使用服务名。
docker compose ps ; docker network inspect <project>_default
根因
客户端无法解析另一服务,因为服务未接入共享网络或使用了错误的主机名,容器内的 DNS 没有可返回的记录。
修复
把服务接入共同网络——Compose 对单文件默认如此,但跨项目不会自动;用服务名引用对端;若使用外部网络则显式定义并让所有相关服务加入。
验证
重跑栈确认服务可解析并连接,并确认两个服务都列出了共享网络。名称解析成功且连接可用即证明网络对齐。
常见陷阱
用 localhost 引用同栈服务会指向容器自身而非对端;应始终使用服务名。