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

如何使用docker cp命令复制并替换Docker容器中的目录

解决Docker cp无法完全替换目录的问题

要实现本地目录custom-data-src和容器内/data/custom-data-dest的完全同步(包括删除源目录已不存在的文件),可以用以下几种方法:

方法1:先清空容器目标目录,再复制

先删除容器内目标目录的所有内容(包括隐藏文件),再执行复制命令:

# 清空目标目录(兼容隐藏文件,忽略不存在文件的报错)
docker exec <container_name> sh -c 'rm -rf /data/custom-data-dest/* /data/custom-data-dest/.[!.]* /data/custom-data-dest/..?* 2>/dev/null'
# 复制源目录内容到容器
docker cp custom-data-src/. <container_name>/data/custom-data-dest

这种方式简单直接,适合一次性同步,但如果目标目录有特殊权限配置,清空后需要重新设置。

方法2:删除并重建目标目录

直接删除整个目标目录,再重新创建后复制,确保完全替换:

# 删除容器内的目标目录
docker exec <container_name> rm -rf /data/custom-data-dest
# 重新创建目标目录(-p确保父目录存在)
docker exec <container_name> mkdir -p /data/custom-data-dest
# 复制源目录内容
docker cp custom-data-src/. <container_name>/data/custom-data-dest

这个方法最彻底,不会残留任何旧文件,但如果目标目录本身有特殊的权限或挂载属性,重建后需要重新配置。

方法3:用rsync实现增量同步(推荐频繁同步场景)

如果需要频繁同步目录,rsync的--delete参数可以自动删除目标目录中源目录没有的文件,实现完全同步。首先确保容器内已安装rsync(比如基于Debian/Ubuntu的镜像执行apt update && apt install -y rsync,CentOS/RHEL则用yum install -y rsync),然后执行:

# 通过管道将本地rsync输出传给容器内的rsync
rsync -av --delete custom-data-src/ - | docker exec -i <container_name> rsync -av --delete - /data/custom-data-dest/

这种方式支持增量同步,只传输变化的文件,效率更高,还能保留目录权限和属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:33:07