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 镜像

就是这把万能钥匙。

posted @ 2026-01-21 20:05  MR__Wang  阅读(6)  评论(0)    收藏  举报