1. 场景背景

在开发过程中,我们经常需要将宿主机(Host)上的数据集、代码或配置文件同步到 Docker 容器中。

  • 本地路径/home/<USER>/datasets/example

  • 容器名称lehome-challenge

  • 容器内目标路径/opt/lehome-challenge/Datasets/


2. 核心命令:docker cp

docker cp 是 Docker 原生提供的文件拷贝命令,支持在容器运行或停止状态下进行操作。

精准执行命令:
# 语法:docker cp <本地路径> <容器名称>:<容器内路径>
docker cp /home/<USER>/datasets/example/. lehome-challenge:/opt/lehome-challenge/Datasets/

💡 小技巧:


4. 进阶建议:使用挂载(Bind Mount)

对于动辄数 GB 的大数据集(如仿真环境中的 .usd 或 .h5 文件),docker cp 会占用双倍磁盘空间。建议在 docker run 时使用 -v 参数进行挂载:

docker run -it -v /home/<USER>/datasets:/opt/lehome-challenge/Datasets lehome-challenge


5. 常见问题排查

  • 路径末尾的 /.:加了 /. 表示只拷贝 example 文件夹内的内容;如果不加,Docker 会把整个 example 文件夹拷贝过去,导致路径变成 /opt/.../Datasets/example/

  • 无需启动容器:即便容器状态为 Exited,拷贝依然可以完成。


  • 3. 操作全流程

    建议遵循以下标

  • 建议遵循以下标准工作流,确保文件拷贝并生效:

  • 确认路径与容器信息

    pwd          # 查看当前绝对路径
    docker ps -a # 获取容器名称或 ID
    
  • 执行拷贝: 运行上述 docker cp 命令。

  • 验证结果

    # 1. 启动容器
    docker start lehome-challenge
    
    # 2. 进入容器
    docker exec -it lehome-challenge /bin/bash
    
    # 3. 检查文件
    ls -lh /opt/lehome-challenge/Datasets/
    
  • 优点:无需手动拷贝,本地修改实时同步,节省空间。

  • 权限问题:拷贝进去的文件默认权限可能属于 root。如果程序无法读取,请在容器内执行: # 格式:chown -R <用户名>:<用户组> <目标路径>
    chown -R root:root /path/to/your/datasets/

  • 路径丢失:如果容器被 docker rm 删除了,通过 cp 拷进去的文件会同步消失。重要数据请务必保存在宿主机并使用挂载方式。

更多推荐