在 Docker 中,容器与宿主机之间的文件复制可通过以下几种方式实现,灵活适用于不同场景(如开发调试数据备份等):


🔧 方法 1:使用 docker cp 命令(推荐单次操作)

语法:

# 宿主机 → 容器
docker cp [宿主机文件路径] [容器名或ID]:[容器内目标路径]

# 容器 → 宿主机
docker cp [容器名或ID]:[容器内文件路径] [宿主机目标路径]

操作步骤

  1. 查询容器 ID 或名称

    docker ps  # 查看运行中的容器
    docker ps -a  # 查看所有容器(含停止状态)
  2. 复制文件

    # 从宿主机复制文件到容器
    docker cp /home/user/data.txt my-container:/app/data.txt
    
    # 从容器复制文件到宿主机
    docker cp my-container:/var/log/app.log ./logs/
  3. 复制目录(自动递归):

    # 复制宿主机目录到容器
    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 中使用 COPYADD 指令:

FROM ubuntu
COPY ./app /app  # 复制宿主机目录到镜像
ADD https://example.com/data.tar.gz /tmp  # 支持URL和解压

构建镜像:

docker build -t my-image .

适用场景

  • 分发应用时静态打包依赖文件。
  • 限制:文件路径必须在构建上下文内(不可用 ../ 跨目录)。

⚠️ 注意事项与常见问题

  1. 路径格式

    • 容器内路径必须是绝对路径(如 /app/data)。
    • 目录复制时,宿主机路径末尾加 / 避免创建嵌套目录(例:docs/.)。
  2. 大文件性能

    • 大量文件传输时,docker cp 可能较慢;优先用数据卷挂载。
  3. 权限问题

    • 容器内用户权限需匹配宿主机文件权限(建议统一用 root 调试)。
    • 挂载目录时出现 Permission denied → 添加 --privileged=true
  4. 容器识别

    • 短ID/名称均可操作(如 docker cp 支持 my-containera1b2c3d)。

💎 总结:如何选择?

场景推荐方式优势
临时复制单个文件docker cp灵活快速,无需重启容器
开发环境(代码实时同步)数据卷挂载 (-v)双向同步,避免重复复制
分发应用(镜像包含静态文件)COPY/ADD构建时固化文件,部署简便
冷数据备份(容器已停止)docker cp支持停止状态的容器
通过组合使用这些方法,可高效管理容器与宿主机间的文件流转。测试时可先用 docker exec -it [容器] bash 进入容器验证路径。

欢迎大家一起讨论, 喜欢的话点赞、 收藏

分类: 默认分类技术 标签: Docker容器复制

评论

暂无评论数据

暂无评论数据

目录