Docker 容器起不来?先查这三处,别急着删容器重建
先说结论
容器起不来,十有八九不是镜像坏了,而是启动条件没满足。按下面三处顺序查,大部分问题五分钟就能定位,不用一上来就删容器重建。
第一处:看容器到底死在哪一步
先用 docker ps -a 看状态:Exited (1) 多半是应用自身报错,Exited (137) 常常是被 OOM kill,Restarting 说明启动命令一直在失败重试。接着用 docker logs --tail 100 容器名,只看最后几十行报错,别从头翻。
日志里常见的三类问题:启动命令写了相对路径、配置文件挂载后路径变了、必需的环境变量没传。看到 no such file、permission denied、connection refused,基本都指向这三类。
第二处:端口和卷挂载冲突
端口被占时 Docker 会直接报错,提示 port is already allocated。这时先用 ss -tlnp 查占用者,再决定换端口还是停掉旧进程,不要反复删容器重建,那解决不了占用问题。
卷挂载要注意宿主机目录权限:容器内跑的是非 root 用户时,挂载进来的目录属主不对就会写不进去,日志同样表现为 permission denied。用 docker inspect 看 Mounts,确认源路径和读写模式是不是你以为的那个。
第三处:资源和镜像本身
磁盘满了镜像解不开、内存不够被系统杀掉,都会表现为容器莫名退出。用 docker system df 看磁盘占用,用 dmesg 查有没有 OOM 记录。清悬空镜像能腾地方,但别在生产机上无脑加 -a 全清。
如果怀疑镜像本身有问题,用 docker run --rm -it 镜像 sh 进去手动跑一遍启动命令:能复现就是镜像或配置问题,复现不了就往宿主机环境上查。
一个顺手的排查顺序
ps -a 看状态,logs 看尾部报错,inspect 看端口和挂载,最后查磁盘和内存。按这个顺序走,基本不用重建容器;真要重建,先把日志和配置拷出来再删,留个现场方便回头复盘。
- 点赞
- 收藏
- 关注作者
评论(0)