【问题标题】:docker: can volume be mounted (terminology question)?docker:可以挂载卷(术语问题)吗?
【发布时间】:2020-03-27 05:38:16
【问题描述】:

我已经搜索了site:stackoverflow.com docker: can volume be mounted?,肯定有很多关于如何做到这一点的帖子。但是,我担心当前发布在网络 docker 文档上的恕我直言内部矛盾(他们每个人都没有给你邮寄日期),并询问谁知道当前正确的说法以及 docker 进化路径的方向:

https://docs.docker.com/storage/bind-mounts/:

绑定挂载从 Docker 早期就已经存在。绑定 与卷相比,挂载的功能有限。

https://docs.docker.com/storage/volumes/

卷是保存由 并由 Docker 容器使用。虽然绑定安装依赖于 主机目录结构,卷完全 由 Docker 管理。

https://docs.docker.com/engine/reference/run/

-v, --volume=[host-src:]container-dest[:]:绑定挂载一个卷。

混淆来自第三个引用,“绑定安装卷”,当它上面的两个链接试图将 bind mountsvolumes 分开时。

--volume--mountrun 的参数可用于 bind mountsvolumes(和 tmpfs btw)这一事实加剧了混淆,并且它们的用法描述包括这两种情况.

正确的说法是什么?我们可以使用mount a volume 还是只使用create volume

添加: 我发现了一种安装卷的“合法”用法:在--volumes-from 标志中(创建一个安装该卷的新容器),但不适用于“旧”--volumes

【问题讨论】:

    标签: docker docker-volume


    【解决方案1】:

    我们可以使用mount a volume 还是只使用create volume

    实际上两者都可以使用,因为它们是两个独立的操作。部分混淆也可能来自volumes 描述源和目标的事实。您在 docker 引擎中创建一个存储卷,然后将该卷挂载到容器中。

    如果您提供的源是文件系统上的路径,那么您正在容器内绑定安装卷。

    您正在关注docker run-v 选项。它的实际作用是:

    • 如果目标不是主机路径,则创建一个卷(如果它不存在)
    • 将该卷(刚刚创建或现有或从主机绑定)挂载到容器内的指定路径

    --volumes-from 与此类似,只是卷将存在,因为容器已经在挂载它/它们,因此必须在某一点创建(或在绑定挂载的情况下存在)

    为了更好地理解,请看这个场景:

    首先你手动创建一个卷。

    $ docker volume create testSO
    testSO
    $ docker volume ls
    DRIVER              VOLUME NAME
    local               testSO
    

    现在您可以将现有的存储卷挂载到容器中并向其推送一些内容

    $ docker run -it --rm -v testSO:/testSO busybox:latest 
    / # echo "I'm a test for SO" > /testSO/test.txt
    / # exit
    

    我以前的容器现在已经死了,但我的存储卷仍然存在。我可以将它重新挂载到新容器上并读取数据

    $ docker volume ls
    DRIVER              VOLUME NAME
    local               testSO
    $ docker run -it --rm -v testSO:/testSO ubuntu:18.04 
    root@d558687a3f6f:/# more /testSO/test.txt 
    I'm a test for SO
    root@d558687a3f6f:/# exit
    exit
    

    现在让我们删除存储卷:

    $ docker volume rm testSO
    testSO
    $ docker volume ls
    DRIVER              VOLUME NAME
    

    如果你启动一个挂载旧卷名的新容器,这个容器将被重新创建并一起挂载(但它当然是空的)

    $ docker run -it --rm -v testSO:/testSO busybox:latest 
    / # ls /testSO/
    / # exit
    $ docker volume ls
    DRIVER              VOLUME NAME
    local               testSO
    

    希望我能帮助澄清。

    【讨论】:

    • 谢谢。我最初的观点是,在docs.docker.com/storage/volumes docker docs 尝试恕我直言,开始将非常具体的含义附加到volume 单词 - 只有在特殊 docker 区域中的卷,如该链接的图片顶部。
    猜你喜欢
    • 2018-10-29
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2020-06-05
    相关资源
    最近更新 更多