如何把文件从宿主机复制到 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 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:默认按容器内路径的属主语义写入,可用 docker cp -a 保留源文件权限位;必要时 docker exec 里 chown。

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

Q:和 Dockerfile 的 COPY 有什么区别?
A:COPY 是构建镜像时打包进镜像层,永久生效;docker cp 是运行时写入容器可写层,容器一删就没。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台