Docker网络排查:容器互通、端口映射和DNS
2022年9月记录,分类「Docker」。这里不追求大而全,主要记录一个测试点从发现到落地的过程。
现象
容器网络问题经常表现成接口超时或数据库连不上。那次我遇到的是容器内能 ping 通 IP,但服务名解析失败,最后定位到 compose 网络和容器重建顺序不一致。
我更关注它在真实提测流程里怎么落地,而不是单独演示一个命令或脚本。
网络层怎么查
- 先在容器内 curl 服务名和端口,确认是不是 DNS 或端口问题。
- 用 docker network inspect 看容器是否在同一个网络。
- 把宿主机端口映射和容器内部端口分开记录。
docker network ls
docker network inspect djangoblog_default
docker exec web getent hosts mysql
docker exec web curl -I http://nginx
验证命令
- 容器名、服务名、网络名和实际 IP 对得上。
- 重建容器后应用配置不写死旧 IP。
- Nginx upstream、Django 配置和 compose 服务名一致。
执行时最好把截图、请求、响应、日志时间点放在一起,后面复盘会省很多事。
复用清单
容器网络排查要进入容器内部看,宿主机能通不代表应用容器能通。真正有价值的不是这一次解决了什么,而是下次能不能更快定位同类问题。