docker cp命令详解
docker cp 命令用于在 Docker 容器 和 宿主机(Host) 之间复制文件或目录。它类似于 Linux 的 cp 命令,但专门用于 Docker 容器与本地文件系统的交互。
1. 命令语法
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
-
CONTAINER:容器名称或 ID。 -
SRC_PATH:源文件/目录路径。 -
DEST_PATH:目标文件/目录路径。
2. 使用示例
(1) 从容器复制文件到宿主机
docker cp my-container:/app/logs/app.log ./logs/
-
将容器
my-container的/app/logs/app.log复制到宿主机的./logs/目录。
(2) 从宿主机复制文件到容器
docker cp ./config.yml my-container:/etc/app/config.yml
-
将宿主机的
./config.yml复制到容器my-container的/etc/app/config.yml。
(3) 复制整个目录
docker cp my-container:/var/log/nginx/ ./nginx-logs/
-
将容器内的
/var/log/nginx/目录复制到宿主机的./nginx-logs/。
3. 常用选项
| 选项 | 说明 |
|---|---|
-a / --archive |
保持文件属性(如权限、所有者)。 |
-L / --follow-link |
复制符号链接指向的实际文件(而非链接本身)。 |
示例(保持文件属性)
docker cp -a my-container:/app/data ./backup/
-
复制时保留文件权限、时间戳等元数据。
4. 注意事项
-
路径格式:
-
容器内路径:必须以
容器名或ID:开头(如my-container:/path/to/file)。 -
宿主机路径:可以是相对路径(
./file)或绝对路径(/home/user/file)。
-
-
文件覆盖:
-
如果目标文件已存在,
docker cp会直接覆盖(无警告提示)。
-
-
容器状态:
-
容器可以是 运行中(Running) 或 已停止(Exited),都能执行复制。
-
-
权限问题:
-
如果容器内文件权限受限(如
root所有),宿主机可能需要sudo才能访问。
-
-
符号链接:
-
默认复制链接本身(而非目标文件),使用
-L复制实际文件。
-
5. 实际应用场景
(1) 备份容器数据
docker cp my-db-container:/var/lib/mysql ./mysql-backup/
-
备份 MySQL 容器的数据到宿主机。
(2) 调试容器
docker cp my-app-container:/tmp/debug.log ./
-
从容器提取日志文件进行分析。
(3) 动态更新配置
docker cp ./new-config.json my-app-container:/etc/app/config.json
docker restart my-app-container
-
更新容器配置文件后重启生效。
6. 与 docker exec 结合使用
如果需要在容器内直接查看或编辑文件,可以结合 docker exec:
# 进入容器查看文件
docker exec -it my-container bash
# 或者直接编辑文件
docker exec -it my-container vi /app/config.yml
7. 总结
| 场景 | 命令示例 |
|---|---|
| 容器 → 宿主机 | docker cp my-container:/path/to/file ./ |
| 宿主机 → 容器 | docker cp ./file my-container:/path/to/file |
| 复制目录 | docker cp my-container:/dir/ ./local-dir/ |
| 保持文件属性 | docker cp -a my-container:/file ./ |
docker cp 是管理容器文件的利器,尤其适用于日志收集、配置更新和备份恢复!
郭慕荣博客园

浙公网安备 33010602011771号