退出码 125 的含义
退出码 125 表示 Docker 客户端或守护进程层失败,容器根本没跑起来,常见于守护进程不可达、参数非法、端口已被占用、镜像不存在。它与 126、127 的区别在于:容器命令压根没有执行。
基本信息
| 含义 | docker run 命令本身失败 |
|---|---|
| 与 126/127 的区别 | 125 是 Docker 层错误,容器命令未执行 |
| 典型原因 | 守护进程不可达、参数非法、端口占用、镜像缺失 |
| 排查入口 | 命令返回的报错原文与守护进程日志 |
| 状态特征 | docker ps -a 里通常没有对应容器 |
典型使用场景
- 脚本里 docker run 返回 125 时定位到 Docker 层而非应用
- 端口冲突排查:宿主上已有服务占用同一端口
- 镜像名或标签拼错导致拉取失败时的判断
- 守护进程未启动或接口权限异常时的识别
- CI 里区分环境问题与应用缺陷
复现与判断
复现与判断
docker run -d --name bad -p 8080:80 nginx:1.27 # 端口被占用时返回 125
docker run --rm nonexist/image:1.0 # 镜像不存在时返回 125
docker inspect -f '{{.State.ExitCode}}' bad 2>/dev/null || echo 容器未创建
journalctl -u docker -n 30 --no-pager # 守护进程侧线索退出码对照
| 退出码 | 含义 | 判断要点 |
|---|---|---|
| 125 | Docker 命令本身失败 | 容器未创建或未启动 |
| 126 | 命令存在但无法执行 | 容器已启动,命令不可执行 |
| 127 | 容器内找不到命令 | 容器已启动,命令不存在 |
| 1 或其他 | 应用自行返回 | 属于业务层结果 |
125 场景下 docker ps -a 里通常没有对应容器,定位重心在命令输出与守护进程日志。
把 125 当应用错误去翻容器日志会徒劳无功,先逐字读命令返回的报错原文。
脚本里 docker run 失败后继续判断容器状态,会把 125 误判成启动后又退出,返回码要先判断。
端口占用是最常见的诱因之一:宿主上已有服务或残留容器都会造成冲突,先确认监听情况。
不同版本对同类错误的返回码可能略有差异,脚本里最好同时检查退出码与错误输出内容。