docker cp 是什么
docker cp 在宿主机与容器之间复制文件或目录,运行中的容器和已停止的容器都支持。它适合应急取配置、捞日志、塞一份临时补丁,但不适合当作部署方式:复制进容器的改动不会写进镜像,容器重建后就消失;写入容器内路径的文件也不会自动出现在卷里。需要长期生效的变更,应该走镜像构建或卷挂载。
基本信息
| 语法 | docker cp 容器:路径 宿主机路径(容器到宿主) |
|---|---|
| 方向 | 支持宿主机到容器、容器到宿主机双向复制 |
| 运行状态 | 运行中与已停止的容器都支持 |
| 能力限制 | 不支持通配符批量匹配;路径按容器内文件系统语义解析 |
| 生效范围 | 改动只作用于当前容器,既不写入镜像也不进入卷 |
典型使用场景
- 容器启动异常时把配置文件取出来与版本库中的文件做比对
- 把容器内日志拷到宿主机,做离线分析与长期留存
- 紧急情况先把修复包拷进容器恢复服务,随后再走正常发布流程
- 取出容器内生成的产物,例如构建结果、导出的数据文件
- 排查前先备份容器内文件作为证据,避免容器重建后现场消失
常用示例
常用示例
docker cp myapp:/etc/app/config.yml ./config.yml # 取出配置对比
docker cp ./hotfix.jar myapp:/app/hotfix.jar # 临时塞入补丁文件
docker cp myapp:/var/log/app.log ./
docker cp ./conf.d nginx:/etc/nginx/conf.d # 目录也可以整体复制
# 复制到容器的文件既不在卷里也不在镜像里,容器重建后即丢失cp 与卷挂载对比
| 方式 | 持久性 | 适用场景 |
|---|---|---|
| docker cp | 仅当前容器生命周期内有效 | 应急取文件、临时补丁、证据留存 |
| 命名卷挂载 | 独立于容器,重建后仍在 | 配置与业务数据持久化 |
| 宿主目录绑定挂载 | 与宿主文件实时同步 | 开发调试、配置注入 |
| 写入镜像 | 容器重建后仍然存在 | 需要固化的正式变更 |
cp 进容器的改动会随容器删除一起消失,既不写镜像也不进卷:它只是临时手段,正式变更必须走镜像构建或卷挂载。
复制目录时源路径的写法会影响结果语义:目标目录不存在时会按目录原名创建,已经存在时则把内容放进该目录。操作前先确认源与目标写法,避免文件落到意料之外的位置。