423 字
1 分钟
Docker Compose 网络与 DNS 故障排查:容器互通失败怎么查
Compose 项目最常见故障之一是“容器都启动了,但服务互相访问不到”。 这类问题通常集中在网络、DNS 和启动顺序。
1. 三个高频报错
connection refusedtemporary failure in name resolutionno route to host
这些报错看起来类似,但根因完全不同。
2. 先看网络拓扑
docker compose psdocker network lsdocker network inspect <network_name>目标:确认服务是否在同一个 compose network。
3. 服务名解析规则
在 Compose 网络内,服务间应通过 service name:port 互访。
错误示例:
- 在容器 A 里访问
localhost:5432连接数据库 B
正确示例:
- 使用
db:5432(db为服务名)
4. depends_on 不是“服务就绪”
depends_on 只保证启动顺序,不保证数据库已经可连接。
建议加健康检查和重试逻辑:
services: app: depends_on: db: condition: service_healthy db: healthcheck: test: ["CMD", "pg_isready", "-U", "postgres"] interval: 5s timeout: 3s retries: 105. 端口映射与容器内访问的区别
ports用于“宿主机 <-> 容器”- 容器之间互访不依赖
ports,依赖内部网络
很多人误以为不映射端口就不能互访,这是典型误区。
6. 快速诊断命令
在容器内执行:
getent hosts dbnc -vz db 5432curl -I http://api:8080这三步能快速判断是 DNS、端口还是服务本身问题。
7. 常见修复动作
- 统一服务到同一个 user-defined network
- 把跨容器访问地址改为服务名
- 为依赖服务加 healthcheck
- 应用端加启动重试机制
总结
Compose 网络故障的本质是“认知模型错误”。 只要你把“容器内 localhost 只指向自己”这件事吃透,80% 的互访问题都能一次定位。
延伸阅读
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Docker Compose 网络与 DNS 故障排查:容器互通失败怎么查
https://levifree.com/posts/docker-compose-network-dns-troubleshooting/ 部分信息可能已经过时
相关文章 智能推荐
1
Docker 部署 Nginx Proxy Manager: 小白也能搞定反向代理
Docker 告别繁琐的 Nginx 配置文件,用可视化面板轻松管理 SSL 证书与域名转发
2
Nginx 502/504 排错指南:反向代理常见故障的定位与修复
Nginx 从上游服务、超时配置到网络连通性,一步步排查 Bad Gateway 和 Gateway Timeout
3
Jekyll 构建报错排查手册:10 个最常见错误与修复步骤
Jekyll 从 Front Matter、依赖冲突到端口占用,给博客维护者一份可复制的故障处理流程
4
个人站监控实战:用 Uptime Kuma 建立可行动的故障告警
运维 拒绝告警疲劳;从独立部署架构、关键字防伪探针、SSL 提前预警到 Telegram 告警模板设计,全流程落地高可用监控
5
Git 冲突处理实战手册:从定位到收敛的一套标准流程
Git 告别手忙脚乱:处理 merge/rebase 冲突时的步骤、命令与风险控制


