docker cp 是什么
在宿主机与容器之间双向复制文件或目录,用的是容器标识加路径的写法,方向由参数顺序决定。它不要求容器处于运行状态,这一点很实用:容器起不来时照样可以把日志、配置或产物取出来分析。
基本信息
| 语法 | docker cp [选项] 源 目标,其中一端写成容器加路径 |
|---|---|
| 方向 | 进出双向,写在前面的为源,写在后面的为目标 |
| 前提 | 容器存在即可,运行中与已停止都支持 |
| 常用选项 | -a 保留权限与属主 -L 跟随符号链接 |
| 路径语义 | 目录复制的层级规则与常规复制命令接近,注意源目录结尾斜杠 |
典型使用场景
- 导出排查材料:把容器里的日志、配置、转储文件取出来分析
- 备份配置:改配置前先把容器内的原文件复制出来留档
- 临时改配置:把本地修改好的配置文件复制进去,重启进程验证效果
- 取出构建产物:一次性容器里生成的产物复制到宿主后即可删除容器
- 容器起不来时抢救数据:运行不起来也能复制文件,避免数据随容器删除丢失
常用示例
常用示例
docker cp ./nginx.conf web:/etc/nginx/conf.d/default.conf # 复制进容器
docker cp web:/etc/nginx/nginx.conf ./nginx.conf.bak # 复制出来备份
docker cp -a ./data web:/app/data # 保留权限复制目录
docker cp web:/var/log/app.log - > app.log # 也可输出到标准输出
docker cp web:/app/dist ./dist # 取出产物常见用途对照
| 目标 | 写法要点 | 注意事项 |
|---|---|---|
| 改动配置 | 宿主文件复制到容器内目标路径 | 复制后要让应用重载,否则进程里仍是旧配置 |
| 导出日志 | 容器路径复制到宿主目录 | 先确认日志没有被轮转删掉 |
| 抢救数据 | 容器数据目录复制到宿主 | 数据目录较大时先在容器内打包再复制 |
| 取出产物 | 容器内产物目录复制到宿主 | 确认产物完整,避免只复制了部分文件 |
| 批量导出 | 循环对多个容器执行 | 命名与路径要一致,避免覆盖同名文件 |
替换配置的正确步骤
- 先把容器里的原文件复制出来留档,出问题可以还原
- 把新文件复制进去,确认路径与文件名完全一致
- 在容器内校验配置语法,避免改坏后直接重启导致服务不启动
- 用应用提供的方式重载或重启进程,让新配置生效
- 验证功能正常后,把改动写回镜像或挂载目录,避免下次重建丢失
复制进容器的改动只影响当前实例,容器被重建或删除后就没了。生产环境的配置变更应落到镜像构建或宿主挂载目录上。
权限保留选项在跨平台复制时行为不完全一致,属主与权限可能出现偏差,复制后核对一下目标文件的属主。