【问题标题】:How to share data between the docker container and the host?如何在 docker 容器和主机之间共享数据?
【发布时间】:2017-06-04 18:18:42
【问题描述】:

我尝试在 docker 容器和主机之间共享数据,例如通过在 docker run 命令中添加参数 -v /Users/name/Desktop/Tutorials:/cntk/Tutorials,但我注意到它也会删除docker 上的所有文件都包含在 /cntk/Tutorials 中。

我的问题是如何创建相同的链接,但将 /cntk/Tutorials 中的所有文件复制到主机(位于 /Users/name/Desktop/Tutorials)

谢谢

【问题讨论】:

  • 问题是为什么要将容器中的数据复制到主机?通常,我们希望与启动时在容器中“加载”持久数据相反。然后在容器运行时修改数据,当容器结束时,数据将保留在主机上。反过来似乎很奇怪,主机上的数据可能会被容器映像中的“静态”数据覆盖......

标签: docker hyperlink directory containers host


【解决方案1】:

docker cp 命令允许您在主机和容器之间按需复制文件/文件夹:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

docker cp ContainerName:/home/data.txt . <== copy from container to host

docker cp ./test.txt ContainerName:/test.txt <== copy from host to container
docker cp ContainerName:/test.txt ./test2.txt <== copy from container to host

详情请运行docker cp --help

【讨论】:

    【解决方案2】:

    说文件被删除是不正确的。它们仍然存在于底层映像中,但是在同一路径上挂载另一个目录的行为模糊了它们。它们存在,但在这种情况下无法访问。

    实现此目的的一种方法是将卷安装到容器中在不同的路径,然后将容器的文件复制到该路径。像这样。

    使用与容器为您感兴趣的文件已有的路径不同的路径安装主机卷。

    docker run -v /Users/name/Desktop/Tutorials:/cntk/Tutorials2 [...]
    

    现在,执行一个命令,将 docker 镜像中的文件复制到外部主机上的挂载卷中。

    docker exec <container-id> cp -r /cntk/Tutorials /cntk/Tutorials2
    

    【讨论】:

      【解决方案3】:

      很遗憾,这是不可能的,take a look here。那是因为这就是挂载在 Linux 中的工作方式。

      【讨论】:

        猜你喜欢
        • 2017-02-21
        • 2016-12-16
        • 1970-01-01
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-23
        相关资源
        最近更新 更多