首页/云/Docker 容器速查/no such file or directory:CRLF 与动态库
容器排障52 条

no such file or directory:CRLF 与动态库

standard_init_linux.go ... exec user process caused: no such file or directory:看似文件在但报不存在,典型原因是脚本 CRLF 换行、shebang 解释器缺失或动态链接库不全。

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

no such file or directory 的真实原因

standard_init_linux.go 报 exec user process caused: no such file or directory:文件明明在却提示不存在。典型原因有三类:脚本是 Windows 换行符导致解释器识别失败、shebang 指向的解释器在镜像里不存在、二进制依赖的动态库不全。

基本信息

原因一Windows 编辑的脚本带换行符,解释器识别失败
原因二shebang 里的解释器路径在镜像中不存在
原因三二进制依赖的动态库缺失
排查手段file 命令与十六进制查看确认格式
根治办法仓库里统一换行符规范

典型使用场景

  • Windows 上编辑的入口脚本拿到 Linux 容器里执行失败
  • 精简基础镜像缺少解释器时定位问题
  • 宿主编译的二进制拷进更薄镜像后启动失败
  • CI 构建产物跑不起来时区分格式问题与依赖问题
  • 制定仓库换行符规范,从源头消除这类问题

排查与修复

排查与修复
file entrypoint.sh                     # 看是否提示换行符格式异常
dos2unix entrypoint.sh                 # 转成 Unix 换行后重建
head -1 entrypoint.sh                  # 确认解释器路径在镜像里存在
docker run --rm --entrypoint sh app/web:1.0 -c 'ldd /app/bin/server 2>/dev/null | grep -i not || true'

线索与对应原因

线索对应原因处理
格式检查提示换行符异常换行符问题转换换行符后重建
解释器路径不存在shebang 与镜像不匹配改 shebang 或换基础镜像
动态库缺失镜像里没有依赖库补依赖或改静态编译
二进制不完整文件传输或构建异常重新导出或重新构建
在仓库里加换行符规范配置能从根本上避免脚本被改成 Windows 换行,比每次手工转换更省事。
这个报错与文件真的不存在很难区分,先用 file 与十六进制查看排除格式问题。
宿主上编译的二进制拷进更薄的基础镜像常缺必要的库,换镜像或改静态编译两种方向都可行。
解释器路径要按目标镜像实际存在的情况写:部分精简镜像只有 sh,写 bash 会直接失败。
排查时先在容器里用 sh 手动执行验证,比反复重建镜像快得多。

易错点

  • 这个报错与文件真不存在难以区分,先用 file 与十六进制查看排除格式问题
  • 宿主上编译的二进制拷进更薄的基础镜像常缺库,需要换镜像或改静态编译
  • 只在本地转换换行符,CI 上重新检出又变回原样,规范要落在仓库配置里
  • shebang 写的解释器在目标镜像里不存在,报错信息却不指出这一点,要手动核对

数据来源与参考

  • Docker 官方文档:Building best practices(docs.docker.com/develop)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌