Docker 镜像启动失败时,如何用 --entrypoint 进入容器排障
Docker 镜像启动即退出?使用 --entrypoint /bin/bash 进入容器排障
在日常使用 Docker 的过程中,经常会遇到这样一种情况:
镜像可以正常 build,但 docker run 一启动就退出,容器根本进不去,日志也看不全。
例如:
docker run my-image
容器瞬间退出,非常难排查问题。
一、万能调试命令
docker run -it --rm --entrypoint /bin/bash 30f6deafb4cd
这个命令的作用是:强制进入容器 Shell,而不是执行原本的启动程序。
二、参数逐个解释
| 参数 | 含义 |
|---|---|
| docker run | 启动容器 |
| -it | 交互终端 |
| docker run | 启动容器 |
| --rm | 容器退出后自动删除 |
| --entrypoint /bin/bash | 覆盖镜像默认启动命令 |
| 30f6deafb4cd | 镜像 ID 或镜像名 |
三、原理说明
假设 Dockerfile 中是:
ENTRYPOINT ["./start"]
但程序 ./start 由于:
缺少动态库
配置文件不存在
Node 版本不对
权限问题
导致程序直接崩溃,容器秒退。
而:
--entrypoint /bin/bash
等价于不执行原有 ENTRYPOINT,只启动一个 bash。于是你就能成功进入容器内部进行人工排障。
四、进入容器后能做什么?
你可以查看文件或日志,例如:
ls /var/log
ls /var/www
cat /var/log/err.log
或者手动运行启动程序:
./start
这样可以看到最原始、最完整的报错信息。
五、常见排查步骤
检查程序是否存在
ls -lh ./start
检查依赖库
ldd ./start
检查配置文件
ls /etc/
ls /var/www/
检查权限
chmod +x ./start
检查环境变量
env | sort
六、关于 --rm 参数
--rm 的含义是:
容器退出后自动删除,不会留下垃圾容器。
如果你希望多次进入同一个容器排查,可以去掉 --rm:
docker run -it --entrypoint /bin/bash 30f6deafb4cd
七、适用场景
该方法非常适合以下场景:
Node / Java / Go 程序启动即退出
二进制文件缺少依赖库
ENTRYPOINT 脚本执行失败
Dockerfile 改完容器起不来
八、查看镜像原始启动命令
docker inspect 30f6deafb4cd | grep -A 10 Entrypoint
九、总结
所有 Docker 启动失败问题,本质只有一句话:
进去看看就知道了。
而:
docker run -it --entrypoint /bin/bash 镜像
就是这把万能钥匙。

浙公网安备 33010602011771号