# 容器排障:网络、磁盘、日志 ## 场景 容器起不来、连不上、把磁盘写满,或者端口映射了却访问不到。 ## 前置条件 - 能 `docker ps -a` 看到容器状态 - 知道容器名或 ID - 宿主机有 root ## 配置 ### 容器起不来 ```bash docker ps -a # 看 STATUS 和退出码 docker logs --tail 200 容器名 docker inspect 容器名 | grep -A5 '"State"' ``` 退出码:`137` 是被 kill(内存超限),`127` 是命令不存在,`1` 看应用日志。 ### 网络 ```bash docker network ls docker inspect 容器名 | grep IPAddress docker exec -it 容器名 ping db docker port 容器名 ss -lntp | grep 8080 ``` ### 磁盘 ```bash docker system df -v du -sh /var/lib/docker/* | sort -h docker system prune -a --volumes # 慎用 ``` ### 资源 ```bash docker stats --no-stream docker inspect 容器名 | grep -i memory ``` ## 验证 ```bash curl -I http://127.0.0.1:8080 docker exec -it 容器名 curl -I http://db:3306 ``` ## 回滚 起不来先回滚镜像版本: ```bash docker compose up -d --force-recreate ``` ## 坑 - **`137` 一般是内存超限**,加 `--memory` 或者看宿主机 OOM。 - 端口映射了但访问不到,先看宿主机防火墙,再看云安全组。 - 容器内 DNS 解析失败,检查 `/etc/resolv.conf` 和 daemon 的 `dns` 配置。 - 日志把盘写满,`json-file` 没配 `max-size`。 - `prune --volumes` 会删数据卷,别在生产随手敲。 - MTU 不一致导致跨主机通信时断时续,尤其是 VXLAN 环境。