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

Docker COPY命令执行失败求助:容器内生成文件无法复制?

问题根源:COPY与RUN的作用范围混淆

你碰到的这个问题,核心是没搞明白Docker里COPY和RUN命令的本质区别:

  • COPY命令的作用是从你的本地构建上下文(也就是执行docker build .时指定的.目录)复制文件到镜像的文件系统中,它不会读取之前构建步骤里容器内部生成的文件。
  • 而你用RUN mkdir target; echo "hello world" > ./target/test.txt是在镜像的容器环境里创建了这个文件,这个文件只存在于镜像的文件系统层中,并不在你的本地构建上下文里,所以COPY自然找不到它。

解决方法:用RUN cp替代COPY

如果要把容器内部生成的文件复制到另一个位置,应该使用RUN cp命令(在容器内部执行复制操作),修改后的Dockerfile如下:

FROM maven AS testdocker
COPY . /server
WORKDIR /server/admin
RUN mkdir target; echo "hello world" > ./target/test.txt
RUN pwd
RUN ls -la ./target/
RUN cp ./target/test.txt /test.txt  # 替换成容器内部的复制命令
CMD ["/usr/bin/java", "-jar", "/server.jar"]

额外说明

如果你的需求是把本地构建上下文里的文件复制到镜像里,那COPY是正确的选择;但如果是在构建过程中生成的文件需要在镜像内部移动/复制,一定要用RUN配合shell命令(比如cp、mv)来完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:47:55