You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker镜像构建中解压文件后COPY命令提示目录不存在的问题求助

问题根源与解决方案

嘿,我一眼就看出问题出在哪了——你在多阶段构建的drop阶段里误用了COPY命令!

为什么会报错?

Docker的COPY命令默认是从你执行docker build的本地主机目录(也就是构建上下文)里读取文件,而不是从当前正在构建的drop阶段容器内部读取内容。你在drop阶段里通过curl和unzip已经在容器的/build目录下生成了amui文件夹,但COPY amui src/I.C.AM.C.P这条命令是在让Docker去你的本地电脑找amui,而不是在容器里找,这自然会报“文件不存在”的错误。

怎么解决?

既然amui已经在当前阶段的容器里了,你根本不需要用COPY,直接用RUN命令来移动/复制容器内的文件就行。根据你的需求,有两种方式:

方式1:直接解压到目标目录

如果你本来就想把压缩包内容放到src/I.C.AM.C.P,可以跳过中间的amui目录,直接解压到目标位置:

FROM build as drop
RUN curl -o drop -u sdf@dise.com:ydfesdfasdfdf56pxvwnd5z6445l7kgezpb2lky6ja2g6xvtina4a --request GET 'https://abe.com/ded/c8002d3e-f4a9-4aea-9ab8-230027996c53/_apis/build/builds/1133376/artifacts?artifactName=drop&api-version=6.0&%24format=zip' -L
# 直接解压到目标目录,省去移动步骤
RUN mkdir -p src/I.C.AM.C.P \
    && unzip drop -d src/I.C.AM.C.P

方式2:先解压到amui,再移动到目标目录

如果你需要保留amui目录的中间步骤,就用mv命令代替COPY:

FROM build as drop
RUN curl -o drop -u sdf@dise.com:ydfesdfasdfdf56pxvwnd5z6445l7kgezpb2lky6ja2g6xvtina4a --request GET 'https://abe.com/ded/c8002d3e-f4a9-4aea-9ab8-230027996c53/_apis/build/builds/1133376/artifacts?artifactName=drop&api-version=6.0&%24format=zip' -L
RUN unzip drop -d amui \
    && mkdir -p src/I.C.AM.C.P \
    && mv amui/* src/I.C.AM.C.P/

额外提醒:如果后续阶段要用到这些内容

如果之后你需要在其他阶段(比如final阶段)复制drop阶段的内容,一定要用--from=drop指定来源阶段,比如:

FROM base as final
WORKDIR /app
# 从drop阶段的/build/src/I.C.AM.C.P目录复制内容到当前容器的/app
COPY --from=drop /build/src/I.C.AM.C.P .

这样修改后,重新构建应该就能解决你的问题了!

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 14:47:42