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

用 docker cp 容器名:容器内路径 宿主机路径 即可把容器内文件拷到宿主机,运行中与已停止的容器都支持;批量目录用挂载卷更方便。本文给出用法与限制。

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

做法:docker cp <容器名或ID>:/容器内路径 /宿主机路径——一条命令把容器里的文件或目录拷到宿主机,容器在运行或已停止状态都可以。典型场景:取回容器内生成的日志、构建产物、配置文件做排查。

基本用法

# 拷单个文件
docker cp myapp:/var/log/app/error.log ./error.log

# 拷整个目录
docker cp myapp:/var/log/app ./app-logs

注意事项

  1. 容器无需运行:停止状态的容器同样能拷,适合抢救崩溃容器的现场文件。
  2. 特殊文件系统不能拷/proc/sys/dev、tmpfs 挂载点内的文件不在拷贝范围。
  3. 权限保持:拷贝以执行 docker 命令的用户身份落盘,文件属主可能变化,注意后续读取权限。
  4. 符号链接docker cp 默认跟随容器内的符号链接解析真实文件。

替代方案:什么时候不该用 cp

  • 持续共享文件(如日志持续产出)→ 用挂载卷 -v /host/logs:/var/log/app,宿主机实时可见
  • 镜像内自带文件 → 直接从镜像取材:docker create 不启动容器 + docker cp,或重建镜像时 COPY 出来
  • K8s 环境 → 用 kubectl cp pod/name:/path ./path -c 容器名

观测云对照

取日志不如直接采集。 与其事后 docker cp 抢救容器日志,不如让 DataKit 实时采集容器 stdout 与容器内日志文件:容器重启、漂移都不丢日志,还能边采集边解析检索。

常见问题(FAQ)

Q:docker cp 会受容器内进程写入影响吗?
A:拷贝瞬间是文件当时的内容,写一半的文件可能不完整;重要文件先让应用 flush/轮转再拷。

Q:能拷到远程另一台机器的 Docker 吗?
A:docker cp 只在本地 Docker 与本地文件系统之间工作;远程场景用 scp 接力或挂载共享存储。

Q:拷大目录慢怎么办?
A:docker cp 底层走 tar 流,目录大时可在容器内先打包压缩再拷单文件。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台