docker cp命令可直接将容器内文件复制到宿主机,无需进入容器且不依赖容器运行状态;语法为docker cp 容器名或ID:容器内绝对路径 宿主机路径,支持-r递归复制目录、-a保留元数据,路径含空格需加引号。

用 docker cp 命令就能把容器里的文件复制到宿主机,不需要进容器、也不依赖容器是否运行(已停止的容器也能操作)。
确认容器名或 ID
先查清目标容器的标识:
- 运行中容器:执行
docker ps,看 NAME 或 CONTAINER ID 列 - 已停止容器:加
-a参数,docker ps -a - 如果名字记不清,可用部分名称匹配,比如
docker ps | grep nginx
执行复制命令
语法固定为:docker cp <容器标识>:<容器内路径> <宿主机目标路径>
- 容器内路径以
/开头,是绝对路径,例如/app/config.yaml - 宿主机路径可以是相对路径(如
./backup/)或绝对路径(如/tmp/) - 若目标是目录且末尾带
/,会把文件放进去;若目标是完整文件名(如/tmp/config.bak),就按该名字保存
示例:docker cp webserver:/var/log/nginx/access.log ./logs/
这条命令会把容器 webserver 里的日志文件复制到当前目录下的 logs/ 文件夹中,文件名保持不变。
复制整个目录或保留属性
默认只复制内容,不带权限和时间戳。如需更完整还原:
- 加
-a:保留所有者、权限、时间戳等元数据 - 加
-R(或-r):递归复制整个目录 - 组合使用:
docker cp -aR myapp:/app/src/ ./src-backup/
常见注意事项
几个容易出错的地方要留心:
- 宿主机目标路径的父目录必须存在,否则报错(比如想存到
/data/logs/,但/data不存在就会失败) - 容器内路径不存在、权限不足或文件被占用时,命令会直接提示错误,不会静默跳过
- 路径含空格或特殊字符(如括号、中文),务必用英文引号包裹,例如:
docker cp "my-container:/opt/my file.txt" "./" - 大文件复制耗时较长,终端无进度条,可另开窗口用
ls -lh观察目标位置文件大小变化


















