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.dpdns.org/posts/docker-compose-network-dns-troubleshooting/ 部分信息可能已经过时
相关文章 智能推荐
1
Docker 部署 Nginx Proxy Manager: 小白也能搞定反向代理
Docker 告别繁琐的 Nginx 配置文件,用可视化面板轻松管理 SSL 证书与域名转发
2
Astro 静态站图片 404 排查:从引用路径到浏览器回归的完整流程
Astro 用页面实际请求而不是目录猜测定位图片缺失;覆盖 public 路径、筛选后渲染与上线前检查
3
Nginx 502/504 排错指南:反向代理常见故障的定位与修复
Nginx 从上游服务、超时配置到网络连通性,一步步排查 Bad Gateway 和 Gateway Timeout
4
Jekyll 构建报错排查手册:10 个最常见错误与修复步骤
Jekyll 从 Front Matter、依赖冲突到端口占用,给博客维护者一份可复制的故障处理流程
5
个人站监控实战:用 Uptime Kuma 建立可行动的故障告警
运维 从监控项、阈值、告警分级到故障演练,避免“有告警但不知道下一步做什么”


