首页/云/Docker 容器速查/退出码 126:命令不可执行
容器排障52 条

退出码 126:命令不可执行

126 表示容器内目标命令存在但无法执行:没有执行权限、格式不对(缺 shebang、二进制与架构不符),或挂载脚本权限位丢失。

Docker 容器速查云更新于 2026-10-13

退出码 126 的含义

退出码 126 表示容器内目标命令存在但无法执行:没有执行权限、格式不对(缺 shebang,或二进制与架构不符),或者挂载进来的脚本权限位丢失。与 127 的区别是命令确实找到了,只是不能执行。

基本信息

含义命令无法被调用
典型场景入口脚本没有执行权限、复制时权限位丢失
验证手段用 ls -l 看权限位,用 file 看文件格式
与 127 的区别127 是找不到,126 是找到了但不能执行
常见环境从 Windows 挂载脚本进来时最容易出现

典型使用场景

  • 入口脚本挂载进容器后没有执行权限
  • 文件复制或打包过程中权限位丢失
  • 二进制与架构不符时定位
  • CI 构建出的脚本权限异常
  • 排查为什么本地能跑、容器里不能跑

验证与修复

验证与修复
docker run --rm -v "$PWD/entry.sh:/entry.sh" alpine /entry.sh    # 权限不足时报 126
docker run --rm alpine sh -c 'ls -l /entry.sh'                   # 核对权限位
docker run --rm --entrypoint sh alpine -c 'chmod +x /entry.sh && /entry.sh'   # 临时验证
# 修复方式:本地补执行权限,或在镜像构建时显式赋权

线索与处理方向

线索原因处理方向
权限位缺少执行挂载或复制丢权限补上执行权限
文件格式异常缺少 shebang补 shebang
架构不符二进制与宿主平台不一致改用匹配平台的制品
本地正常容器异常宿主权限模型不同在镜像内固定权限
绑定挂载会保留宿主的权限位,从 Windows 挂载的脚本常常缺少执行权限,排查时先看权限。
放进镜像的脚本要在构建阶段显式赋予执行权限,别依赖宿主文件当前的状态。
126 也可能是文件格式不对,配合格式检查与架构确认一起看,避免只改权限。
排查时可以直接在容器里手动赋权执行,快速判断是权限问题还是格式问题。
团队里把脚本执行权限写进构建步骤,比在宿主上逐个调整更稳定。
同一份脚本在宿主与容器里的权限表现可能不同,以容器内核对的结果为准。

易错点

  • 从 Windows 挂载的脚本常缺执行权限,排查时先看权限位
  • 放进镜像的脚本没在构建阶段赋予执行权限,运行时报错
  • 把 126 当纯权限问题只改权限,实际是格式或架构问题
  • 只依赖宿主上的权限状态,容器内实际权限可能不同

数据来源与参考

  • Docker 官方文档:docker run Exit status(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌