Oamc

容器排障:网络、磁盘、日志

本页目录

场景

容器起不来、连不上、把磁盘写满,或者端口映射了却访问不到。

前置条件

  • 能 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 环境。