如何把文件从宿主机复制到 Docker 容器?

docker cp 宿主机路径 容器名:容器内路径 即可把文件拷入运行中的容器;目录整体拷贝用 源目录/. 写法;调试后可 docker commit 保存可写层变更(不含挂载卷)。本文给出用法与最佳实践。

最佳实践
如何把文件从宿主机复制到 Docker 容器?封面

做法:docker cp 源路径 <容器名>:/目标路径——把宿主机上的文件或目录拷进正在运行的容器,常用于调试时临时替换配置、注入证书或补丁文件。

基本用法

# 拷单个文件
docker cp ./app.conf myapp:/etc/app/app.conf

# 拷整个目录内容(注意结尾的 /.)
docker cp ./conf/. myapp:/etc/app/

目录写法中 src/. 表示"目录里的内容",目标是否创建依文件/目录及末尾斜杠而定,docker cp 不会自动创建所有缺失的父目录,先确认目标父路径存在。

让改动生效

拷进去的配置文件通常需要让进程重读:

docker exec myapp nginx -s reload      # 以 nginx 为例
# 或重启同一容器(可写层仍保留;删除重建才不同)
docker restart myapp

重要提醒:cp 进去的东西不持久

容器的可写层随容器删除而消失。docker cp 只适合临时调试;需要长期生效的改动应该:

  1. 改进镜像:把文件写进 Dockerfile 的 COPY 指令,重建镜像
  2. 用挂载:-v ./app.conf:/etc/app/app.conf 或 named volume
  3. 调试后固化:docker commit myapp myapp:patched 把可写层变更存成新镜像(不包含挂载卷数据)(应急可用,不推荐作为常规发布方式)

常见问题(FAQ)

Q:拷贝后容器内文件属主是谁?
A:复制到容器的文件默认通常为root:root,-a用于保留源UID/GID;权限位会尽可能保留;必要时 docker exec 里 chown。

Q:能往已停止的容器拷文件吗?
A:可以,docker cp 对停止的容器同样有效。

Q:和 Dockerfile 的 COPY 有什么区别?
A:COPY 是构建镜像时打包进镜像层,永久生效;docker cp 写入目标路径;普通路径在可写层中随删除消失,挂载路径则由卷/bind mount生命周期决定。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台