解决 Docker 报错 “exec: no such file or directory”

Java执行外部命令报错:No such file or directory 深度解析与解决方案 在Java应用开发中,进程间通信与系统调用是常见的需求,开发者常通过Runtime.exec()或ProcessBuilder来执行外部命令。其底层原理是Java虚拟机通过JNI接口,将命令字符串交由操作系统的进程创建系统调用(如fork/exec)处理。这一机制的核心技术价值在于实现了Java生态与原生系统能力的无缝集成,极大地扩展了应用的功能边界。然而,该过程高度依赖操作系统的环境,尤其是在解析可执行文件路径时,若目标程序不在系统PATH环境变量指定的目录中,或提供的绝对/相对路径有误,系统便会返回EN 阅读详情

在构建和运行基于 Go 的 Docker 镜像时,很多人会遇到一个非常迷惑的报错:

docker: Error response from daemon: exec: "/bin/myapp": stat /bin/myapp: no such file or directory

乍一看,好像是路径错了或者文件没复制进去,但明明你进入容器之后发现这个文件是存在的,甚至可以看到 /bin/myapp 有正确的权限。

这篇文章将深入分析该错误产生的 根本原因,并提供 系统性的排查与解决方案,特别适用于使用 Go 构建镜像的情况。


❗常见的误区

很多人第一反应是:

“文件不是在那儿吗?是不是路径错了?”

但其实,这个错误信息 具有很强的误导性,它通常并不是字面意义的 “文件不存在”,而是指“文件无法加载/执行”。


✅ 常见原因总结

一、可执行文件依赖的动态链接库缺失(最常见)

背景

如果你的 Go 程序编译时启用了 CGO(即 CGO_ENABLED=1),最终生成的二进制会依赖操作系统中的动态库,例如 libc.so.6 等。

如果你将这个二进制丢进一个极度精简的镜像,比如 scratch 或 alpine,这些库并不存在,程序在运行时就会崩溃。

Docker 会误报成:
no such file or directory
解决方法

使用静态编译:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go

确保使用的是 完全静态链接 的可执行文件,这样你就可以安全地放进 scratch 或其他极简镜像中运行。


二、使用了错误的基础镜像(架构或依赖不匹配)

如果你使用的镜像架构(如 arm64)与生成的二进制不一致,或者你用了 scratch 却没有静态编译,也会导致该错误。

示例:

你用了 FROM scratch,但却用默认编译的方式(CGO 打开)构建你的程序,这就会失败。

正确做法:
  • FROM scratch 只能运行 静态编译 的可执行文件。
  • 如果使用 CGO_ENABLED=1,请选择如 debian, alpine, 或 distroless 等含 libc 的镜像。

三、文件本身损坏或权限问题

虽然不太常见,但也可能发生。

检查文件是否存在、可执行:
ls -l /bin/myapp

应看到:

-rwxr-xr-x 1 root root 1234567 Jul 29 00:00 /bin/myapp

如果没有执行权限,加上即可:

chmod +x /bin/myapp

四、文件架构不兼容

如果你在 Mac 上构建了 darwin 平台的二进制,却放进了 Linux 容器中运行,也会报这个错误。

检查方法:
file myapp

应看到类似:

ELF 64-bit LSB executable, x86-64, ...

如果输出的是:

Mach-O 64-bit executable x86_64

那你把 macOS 的二进制放进了 Linux 容器 —— 是绝对跑不了的。

解决:

确保用下面的方式构建:

GOOS=linux GOARCH=amd64 go build -o myapp main.go

✅ 推荐 Dockerfile 示例(适用于 Go 项目)

使用多阶段构建 + scratch(纯静态)

# 阶段1:构建
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go

# 阶段2:运行
FROM scratch
COPY --from=builder /app/myapp /bin/myapp
ENTRYPOINT ["/bin/myapp"]

如果你不确定是否静态编译,改成 Debian 这样的基础镜像会更保险:

使用 debian 镜像(支持动态库)

FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp main.go  # 可支持 CGO

FROM debian:bullseye-slim
COPY --from=builder /app/myapp /bin/myapp
ENTRYPOINT ["/bin/myapp"]

🛠 整体排查清单

排查项命令是否通过
文件是否存在ls /bin/myapp✅
文件是否可执行ls -l /bin/myapp✅
是否缺动态库ldd /bin/myapp❌ 不应出现 not found
架构是否正确file /bin/myapp应为 ELF 64-bit LSB executable, x86-64
是否静态编译CGO_ENABLED=0 编译✅
镜像是否支持运行该文件使用合适基础镜像✅

✅ 总结

Docker 报 “no such file or directory”,很可能并不是找不到文件本身,而是找不到运行它所需的依赖。对于 Go 项目,这类问题的根源大多出在构建方式和镜像基础选择上。

推荐做法:

  • 静态编译:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ...
  • 合理选用镜像:scratch / alpine / debian / distroless
  • 用 file 和 ldd 工具检查可执行文件健康状况

🔚 附:常见命令备查

# 检查文件依赖库
ldd /bin/myapp

# 检查文件架构
file /bin/myapp

# 添加执行权限
chmod +x /bin/myapp

# 静态编译(推荐)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp main.go
pull镜像报错:Error Standard_init_linux.go:219: exec user process caused: no such file or directory 问题描述 启动pod,pull image 时报错,错误信息如下: Error Standard_init_linux.go:219: exec user process caused: no such file or directory 分析 从问题表象,初步判断是打镜像时,引入的二次进文件格式问题,后面查了下,go build 时要指定 CGO_ENABLE参数 # 有问题的 build 命令 go build CGO_ENABLED=1 GOOS=linux GOARCH=amd64 -mod=ve 阅读详情

相关推荐

Anki小白必看:手把手教你打造高颜值个性化笔记模板(附Leaflyer模板下载)

本文为Anki新手提供详细的个性化笔记模板设计指南,从基础配置到高级定制技巧,帮助用户打造高效记忆系统。特别推荐Leaflyer模板下载,通过视觉优化和功能强化,显著提升学习体验和记忆效率。

weixin_28717969的博客 433

Docker启动故障问题 no such file or directory解决方法

服务重启后, 通过docker start 方式无法启动实例, 报出错误: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/xxx/merged: no such file or directory , 可以通过以下方法, 在不损坏容器数据的前提下,恢复运行...

Mirson - 多一些分享, 多一些进步 1万+

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

Docker报错,No such file or directory

Docker

Naptmn的博客 1万+

视频教程-SAP S4 HANA FICO COPA 获利能力分析-ERP

SAP S4 HANA FICO COPA 获利能力分析 从业超过8年的SA...

weixin_33456805的博客 1442

MT6768平台Sensor Bring Up全流程实战:从驱动添加到问题排查(附避坑指南)

本文详细介绍了联发科MT6768平台Sensor Bring Up的全流程实战指南,从驱动添加、硬件配置到问题排查,提供了全面的避坑建议。内容涵盖环境准备、驱动文件集成、硬件接口配置、编译系统适配以及常见问题解决方案,帮助开发者高效完成传感器集成与调试工作。

weixin_30374009的博客 416

docker容器中sh脚本明明存在,启动容器时却一直报错:no such file or directory

docker容器中sh脚本明明存在,启动容器时却一直报错:no such file or directory

聂可以的博客 1万+

群晖NAS搭建Git Server避坑指南:从SSH配置到权限管理的完整流程

本文提供了一份详尽的群晖NAS搭建Git Server实战指南。文章从启用并安全配置SSH服务入手,深入解析了用户权限体系设计、SSH连接与仓库初始化、客户端SSH密钥配置等核心步骤,并提供了常见错误排查与生产环境加固方案,帮助开发者成功构建私有、安全的代码托管平台。

rock5的博客 420

docker执行报错:no such file or directory: unknown

golang静态编译

flynetcn的专栏 3180

STM32实战:5分钟搞定CanFestival协议栈下的CANopen心跳报文配置(附避坑指南)

本文详细介绍了如何在STM32平台上使用CanFestival协议栈快速配置CANopen心跳报文,包括硬件准备、协议栈移植、心跳报文配置及常见问题解决方案。通过实战步骤和避坑指南,帮助开发者高效实现节点状态监控,提升工业控制系统的可靠性。

win55的博客 747

ZYNQ通过AXI DMA实现PL发送连续大量数据到PS DDR

方案二是在PS端的MPU配置中,将DMA缓冲区所在的内存区域标记为“不缓存”(Device或Strongly Ordered类型),但这样CPU访问这些内存区的速度会大幅降低,需要根据实时性和数据正确性的需求做权衡。更妙的是,描述符链表可以做成一个环状队列,放在DDR里让DMA循环取走,从而实现持续不断的“流式”传输。用FPGA实现FFT硬件加速的系统中也是如此:PS向PL提交待处理的FFT数据,PL硬件加速计算后,DMA把结果写回DDR,全程CPU几乎只做配置调度,大量数据吞吐留给了硬件通道。

QQ_778132974的博客 175

关于Docker中 docker build 时no such file or directory报错

主要原因是命令行没有在文件夹下执行docker build,cd到指定文件夹下执行即可。

不要和代码过不去 7944

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 447

Docker 报错 “exec ./entrypoint.sh: no such file or directory” 的技术排查与解决方案

本文将对该问题的常见原因和排查方法进行详细分析,帮助开发者快速定位和修复问题。(2)看右下角的状态栏,有个显示换行符的标识:通常是。(1)检查 Dockerfile 中是否有 COPY 命令。这个操作会把 Windows 换行符((1)在 VS Code 中打开。(2)打开 Git Bash。(2)换行符问题(Windows 用户常见))换行格式,Linux 会识别错误,导致。如果你在 Windows 上开发,)改为 Linux 兼容的换行符(,安装后会附带 Git Bash。或者路径错了,这就是原因。

qq_30345409的博客 2079

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Docker:exec /xxx.sh no such file or directory

今天第一次在服务器上使用Docker,踩了很多坑,记录一下。有些通过gpt顺利解决了,而另外一些,如标题所示的bug,实在匪夷所思!最终还是通过在网上查找前人经验才得以解决。不禁感叹人类智慧的强大,在debug中若是太过依赖gpt,那很多时候可能真的只会在原地兜圈子。

夜雨拾年的博客 1445

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

docker镜像:exec user process caused “no such file or directory“

在k8s上 运行docker镜像,报错: standard_init_linux.go:207: exec user process caused “no such file or directory” 原因: windows下文件默认编码格式为dos,linux下默认为unix。因此在解析文件时出错,报错no such file or directory。 验证方式: 将Dockerfile 文件放在linux下查看。 运行 cat -v Dockerfile 结果 RUN chmod +x /app

A_BCDEF_的博客 2509

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

docker-compose exec时出现"fork/exec /proc/self/exe: no such file or directory" 报错

问题:跟往常一样执行docker-compos exec redis sh时出现如下错误,而容器是运行状态中。 # docker-compose exec redis sh rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process...

weixin_30642305的博客 1113

Docker 本地导入镜像“exec: \“/bin/bash\“: stat /bin/bash: no such file or directory“: unknown

详细报错信息 docker run -it ubuntu:v2 /bin/bash docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown. 更换成/bin/sh后还是不

thlqq的博客 7688

进入Docker容器报错:bin/bash: no such file or directory“: unknown

1.详细报错信息 执行docker exec -it [containerId] /bin/bash报错: OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown 解释:说明镜像不包括bash风格的操作,提示未知

G_x_n的博客 2万+

macos docker挂载iso报failed to setup loop device: No such file or directory和mount: permission denied解决

介绍   最近在macos的docker容器中需要使用mount挂载iso,挂载时报错failed to setup loop device: No such file or directory和mount: permission denied。找了一下,发现网上资料非常少,而且也有的方法试了也没有用,倒腾了很久,因此记录下来,帮助有需要的朋友,如果对你有帮助,帮忙点个赞,如果对你没帮助,欢迎在评论区评论,或补充你的解决方式,谢谢。 软件版本 os: max os x docker: 2.2.0.5 im

巨魔战将 2万+

Docker容器启动报错 no such file or directory?原来是CRLF换行符在作怪

在跨平台开发与容器化交付中,换行符差异是一个极易被忽视却又影响深远的底层细节。Unix/Linux 系统使用 LF(\n)标识换行,而 Windows 默认使用 CRLF(\r\n),当脚本文件在 Windows 上编辑并通过 Git 提交后,隐藏的回车符可能悄悄混入镜像。Docker 构建阶段往往一切正常,但容器运行时内核解析 shebang 时,会把回车符当作解释器路径的一部分,导致 exec user process caused: no such file or directory 的误导性报错。理

weixin_33326218的博客 265

"exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown

出现这问题可能是该镜像出毛病,暂时不能进入/bin/bash。我成功的方法是 在输入docker exec -it 6fafc7bbaab3 /bin/bash报错后换成输入 docker exec -ti 6fafc7bbaab3 /bin/sh 其余的像下面的操作也能成,随后断开连接后按下面来输入docker exec -it 6fafc7bbaab3 /bin/bash 就成功了。 doc...

weixin_43256057的博客 1万+

exec user process caused: no such file or directory

DOCKER启动失败,报错如下: standard_init_linux.go:219: exec user process caused: no such file or directory 有几种可能 1,CMD脚本不存在或者无权限 2,CMD脚本bash或者sh环境不对 3,CMD脚本换行符不对,进入脚本使用set ff查看,是dos或者是unix。linux需要unix。修改命令set ff=unix ...

linux_s2018的博客 4081

使用docker-compose启动docker镜像报错exec ./docker-entrypoint.sh: no such file or directory

使用docker-compose启动docker镜像报错exec ./docker-entrypoint.sh: no such file or directory

m0_56500302的博客 4400

docker run 报错 standard_init_linux.go:211: exec user process caused “no such file or direct

Docker使用过程中的问题问题描述总结 问题描述 问题1描述 Docker run 的适合报错 standard_init_linux.go:211: exec user process caused “no such file or directory” standard_init_linux.go:211: exec user process caused "no such file or directory" 找了很多解决方案 方案一:修改文件格式(check所有打进镜像启动需要的文件,重点关注

IChen.的博客 2257
上一篇: 为什么设置 git commit签名是公钥而不是私钥?
下一篇: 在 DDD 分层架构中,应用层是否仅用于处理对外暴露的接口?
Toormi
博客等级 码龄11年 563粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值