如何在docker容器和宿主机之间复制文件
在 Docker 中,容器与宿主机之间的文件复制可通过以下几种方式实现,灵活适用于不同场景(如开发调试数据备份等):
🔧 方法 1:使用 docker cp
命令(推荐单次操作)
语法:
# 宿主机 → 容器
docker cp [宿主机文件路径] [容器名或ID]:[容器内目标路径]
# 容器 → 宿主机
docker cp [容器名或ID]:[容器内文件路径] [宿主机目标路径]
操作步骤:
查询容器 ID 或名称:
docker ps # 查看运行中的容器 docker ps -a # 查看所有容器(含停止状态)
复制文件:
# 从宿主机复制文件到容器 docker cp /home/user/data.txt my-container:/app/data.txt # 从容器复制文件到宿主机 docker cp my-container:/var/log/app.log ./logs/
复制目录(自动递归):
# 复制宿主机目录到容器 docker cp /home/user/docs/. my-container:/opt/docs/ # 从容器复制目录到宿主机 docker cp my-container:/tmp/logs/ /backup/
✅ 特点:
- 无需容器运行:即使容器停止,命令仍生效。
- 路径为绝对路径:容器内路径需用绝对路径,宿主机可用相对路径 。
- 权限要求:需宿主机有
docker
执行权限(非root
用户需加sudo
)。
📂 方法 2:挂载数据卷(推荐频繁读写场景)
通过 -v
参数在启动容器时挂载目录,实现双向实时同步:
docker run -it -v /宿主机目录:/容器目录 --name my-container 镜像名
操作示例:
# 启动容器并挂载目录
docker run -v /home/user/project:/app/code --name dev-app ubuntu
# 宿主机修改文件 → 容器内实时同步
echo "test" > /home/user/project/test.txt
# 容器内查看同步结果:
docker exec dev-app cat /app/code/test.txt
✅ 特点:
- 双向实时同步:文件修改即时生效。
- 长期数据持久化:容器删除后数据仍保留在宿主机。
- 权限问题处理:添加
--privileged=true
避免Permission denied
错误。 - 多容器共享:通过
--volumes-from
继承卷规则(如容器A → 容器B)。
🏗️ 方法 3:构建镜像时复制文件(静态打包)
在 Dockerfile
中使用 COPY
或 ADD
指令:
FROM ubuntu
COPY ./app /app # 复制宿主机目录到镜像
ADD https://example.com/data.tar.gz /tmp # 支持URL和解压
构建镜像:
docker build -t my-image .
✅ 适用场景:
- 分发应用时静态打包依赖文件。
- 限制:文件路径必须在构建上下文内(不可用
../
跨目录)。
⚠️ 注意事项与常见问题
路径格式:
- 容器内路径必须是绝对路径(如
/app/data
)。 - 目录复制时,宿主机路径末尾加
/
避免创建嵌套目录(例:docs/.
)。
- 容器内路径必须是绝对路径(如
大文件性能:
- 大量文件传输时,
docker cp
可能较慢;优先用数据卷挂载。
- 大量文件传输时,
权限问题:
- 容器内用户权限需匹配宿主机文件权限(建议统一用
root
调试)。 - 挂载目录时出现
Permission denied
→ 添加--privileged=true
。
- 容器内用户权限需匹配宿主机文件权限(建议统一用
容器识别:
- 短ID/名称均可操作(如
docker cp
支持my-container
或a1b2c3d
)。
- 短ID/名称均可操作(如
💎 总结:如何选择?
场景 | 推荐方式 | 优势 |
---|---|---|
临时复制单个文件 | docker cp | 灵活快速,无需重启容器 |
开发环境(代码实时同步) | 数据卷挂载 (-v ) | 双向同步,避免重复复制 |
分发应用(镜像包含静态文件) | COPY /ADD | 构建时固化文件,部署简便 |
冷数据备份(容器已停止) | docker cp | 支持停止状态的容器 |
通过组合使用这些方法,可高效管理容器与宿主机间的文件流转。测试时可先用 docker exec -it [容器] bash
进入容器验证路径。
欢迎大家一起讨论, 喜欢的话点赞、 收藏
版权申明
本文系作者 @lili 原创发布在十指的世界站点。未经许可,禁止转载。
暂无评论数据