You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多阶段构建Dockerfile文件缺失错误的原因及修复方法

Docker多阶段构建COPY失败:文件不存在的问题解决

错误原因

兄弟,你这问题是典型的文件名不匹配导致的!看你的Dockerfile和构建日志就能明白:
在编译阶段的RUN指令里,你用gcc生成的可执行文件是**.hello**(开头带点的隐藏文件):

RUN gcc ./hello.c -o .hello

但到了复制阶段,你却要复制一个叫**hello**的文件:

COPY --from=compiler /compiling/hello .

Docker在编译阶段的镜像里根本找不到hello这个文件,自然就抛出找不到文件的错误了。

修复方案

给你两个简单的修复选项,选哪个都行:

选项1:修改编译输出的文件名(推荐)

把编译生成的文件名改成hello,和后续复制路径对应上,逻辑更清晰直观:

FROM gcc:latest as compiler
WORKDIR /compiling/
ADD hello.c .
# 把输出文件名从.hello改为hello
RUN gcc ./hello.c -o hello
FROM scratch
WORKDIR /running/
COPY --from=compiler /compiling/hello .
CMD ["./hello"]

选项2:修改COPY的源文件路径

如果你非要保留隐藏文件名的命名方式,那就要同步修改COPY和CMD的对应路径:

FROM gcc:latest as compiler
WORKDIR /compiling/
ADD hello.c .
RUN gcc ./hello.c -o .hello
FROM scratch
WORKDIR /running/
# 复制隐藏文件.hello到目标目录
COPY --from=compiler /compiling/.hello .
# 运行时也要指定对应的隐藏文件名
CMD ["./.hello"]

验证步骤

改完Dockerfile后,重新执行构建命令:

docker build -t hello-node3:v6 .

构建成功后跑个容器测试一下:

docker run hello-node3:v6

正常情况下就能看到你hello.c里的输出内容啦!

内容的提问来源于stack exchange,提问作者user1608790

火山引擎 最新活动