当Docker容器启动失败时,可以按照以下步骤进行排查:
docker logs <container_id_or_name>
如果容器从未成功启动过,可以尝试:
docker logs --details <container_id_or_name>
docker ps -a
查看容器的状态(Exited, Created等)和退出代码。
常见的退出代码含义:
- 0
: 正常退出
- 1
: 应用错误
- 125
: Docker守护进程错误
- 126
: 容器内命令无法执行
- 127
: 容器内命令未找到
- 137
: 容器被SIGKILL终止(通常是OOM)
- 139
: 段错误(Segmentation fault)
- 143
: 容器被SIGTERM终止
docker run -it <image_name> /bin/bash
这可以帮助你查看容器内部环境。
docker inspect <container_id_or_name>
查看是否有内存、CPU等资源限制导致的问题。
docker port <container_id_or_name>
netstat -tulnp | grep <port>
docker inspect -f '{{ .Mounts }}' <container_id_or_name>
确保挂载的卷存在且权限正确。
docker inspect -f '{{ .Config.Env }}' <container_id_or_name>
journalctl -u docker.service
# 或
cat /var/log/docker.log
docker pull <image_name>
如果上述方法都无法解决问题,可以尝试:
# 使用strace调试容器进程
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -it <image_name> /bin/bash
# 然后在容器内安装strace并调试
通过系统性的排查,通常可以找到容器启动失败的根本原因。