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