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

如何在Dockerfile中实现容器间文件复制?现有COPY指令执行失败

Docker容器间文件复制的正确方式

首先明确:Dockerfile里的COPY指令无法直接跨运行中的容器复制文件——它的作用范围仅限构建上下文(本地文件/目录)或多阶段构建的前序构建阶段,根本不支持直接访问另一个容器的文件系统,你写的containersource:/mypath/filename.properties这种格式完全不符合COPY的语法规范,所以必然执行失败。

要实现容器A到容器B的文件复制,推荐两种常用方案:

方案1:用docker cp命令(运行时操作)

如果是在容器运行后完成复制,直接用Docker命令行工具操作:

  • 先把容器A的文件复制到本地临时位置:
    docker cp containersource:/mypath/filename.properties ./temp-file.properties
    
  • 再将本地文件复制到容器B:
    docker cp ./temp-file.properties containerdest:/path/cfg/
    

也可以跳过本地临时文件,一步完成:

docker exec containersource cat /mypath/filename.properties | docker exec -i containerdest sh -c 'cat > /path/cfg/filename.properties'

方案2:通过共享存储卷(支持构建/运行时共享)

如果需要长期共享文件,或者在构建镜像阶段就需要文件同步,建议用Docker卷:

  • 创建一个共享卷:
    docker volume create shared-data
    
  • 启动容器A时挂载该卷,再把目标文件复制到卷内路径:
    docker run -d --name containersource -v shared-data:/shared-volume your-image-a
    docker exec containersource cp /mypath/filename.properties /shared-volume/
    
  • 启动容器B时挂载同一个卷到指定路径:
    docker run -d --name containerdest -v shared-data:/path/cfg your-image-b
    

此时容器B的/path/cfg目录下就能直接访问到目标文件。

补充:多阶段构建场景(仅镜像构建时)

如果你的需求是构建容器B的镜像时,从容器A的镜像(而非运行中的容器)复制文件,可以用多阶段构建:

# 第一阶段:基于容器A的镜像创建临时构建阶段
FROM your-image-a as stage-a
# 第二阶段:构建容器B的镜像
FROM your-image-b
# 从临时阶段复制文件到当前镜像
COPY --from=stage-a /mypath/filename.properties /path/cfg/

注意这里是从镜像(构建阶段)复制,不是从运行中的容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:42:14