【问题标题】:Docker Data Volumes and Mounting to HostDocker 数据卷和挂载到主机
【发布时间】:2017-11-13 23:41:18
【问题描述】:

我刚刚通读了 Docker 文档,并试图更好地理解 Docker 数据卷,因为文档有点模糊。

我的理解有两种方法可以挂载 Docker 卷:

  • 简单挂载(例如docker run -it -v /data --name container1 busybox);和
  • 挂载到主机(例如docker run -it --name container1 -v /path/on/host:/datavol busybox

但是为了使卷在容器重新启动甚至容器换出(旧容器被删除,新容器被创建/启动)时保持不变,卷是否必须在两者中都安装到主机方法?!? 换句话说,如果我没有通过“简单挂载方法”显式挂载到主机,卷实际挂载到哪里?这个位置如何在容器交换中幸存下来?

另外,在这两种情况下,我假设卷仅在给定主机上是本地的,并且如果您有一个 Swarm 或集群在多个主机上运行,​​则无法使用这些命令,以便在不同主机上运行的容器可以访问这些卷,是吗? (我猜这就是数据卷容器发挥作用的地方,对吧?)提前致谢!

【问题讨论】:

    标签: docker mount docker-volume


    【解决方案1】:

    在这两种方法中,卷是否都必须安装到主机上?!?

    是的,这两种方法都基于在容器生命周期中持续存在的主机目录。

    使用这些命令获取更多信息:

    docker volume ls
    docker volume inspect <volume-id>
    # and
    docker inspect <container-id>
    

    (方法 1)卷实际安装到哪里?

    这样做:

    docker inspect <container-id>
    

    您的答案在“来源”中:

    "Mounts": [
                {
                    "Type": "volume",
                    "Name": "96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001",
                    "Source": "/var/lib/docker/volumes/96f5e6531480cc716cd030f3f60f8927a55728a52d55ad55589752c2b89f2001/_data",
                    "Destination": "/data",
                    "Driver": "local",
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ],
    

    请注意,如果您在 OSX 或 Windows 中,该 Source 指的是运行 docker 的 VM 内的本地目录。

    这个位置如何在容器交换中幸存下来?

    它们之所以存在,是因为它们基于主机的本地目录(它们是卷,因此它们存在)。

    如果您在多个主机上运行 Swarm 或集群,则无法使用这些命令让运行在不同主机上的容器访问这些卷,是吗?

    关于简单的卷配置,您是正确的。这就是 docker 变得棘手的地方,即持久性。您可以在主机文件系统级别实现共享目录,然后在容器中挂载为卷,这样您就可以在集群的主机之间获得共享卷。

    https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-shared-storage-volume-as-a-data-volume

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2021-07-04
      相关资源
      最近更新 更多