在Docker中查找数据卷

目前我正在尝试学习docker,而且我对数据卷实际存在的位置感到困惑。

我正在使用Docker for windows。 (Windows 10)

在文档中,他们说运行docker检查对象会给你的源代码: https : //docs.docker.com/engine/tutorials/dockervolumes/#locating-a-volume

$ docker inspect web "Mounts": [ { "Name": "fac362...80535", "Source": "/var/lib/docker/volumes/fac362...80535/_data", "Destination": "/webapp", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ] 

但是我不明白这一点,我得到以下几点:

 $ docker inspect blog_postgres-data [ { "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/blog_postgres-data/_data", "Name": "blog_postgres-data", "Options": {}, "Scope": "local" } ] 

谁能帮我? 我只想知道我的数据卷实际存在于我的主机上? 如果是这样,我怎么能得到它的path?

谢谢

你的卷目录是/var/lib/docker/volumes/blog_postgres-data/_data ,而/var/lib/docker通常安装在C:\Users\Public\Documents\Hyper-V\Virtual hard disks ,无论如何你可以检查它通过查看docker设置。

你可以参考这个文档了解如何在Windows上与Docker共享驱动器。

BTW, Source是主机上的位置, Destination是下面输出中容器内的位置:

 "Mounts": [ { "Name": "fac362...80535", "Source": "/var/lib/docker/volumes/fac362...80535/_data", "Destination": "/webapp", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ] 

================================================== =========================

更新回答评论中的问题:

我的主要好奇之处在于分享图片等很棒,但我该如何分享我的数据呢?

实际上volume就是为此目的而devise的(在docker容器中pipe理数据),volume中的数据在host FS上持久化,并与docker container / image的生命周期隔离。 您可以通过以下方式分享数据:

  • 将docker卷挂载并重用

    docker run -v /path/on/host:/path/inside/container image

    然后,所有数据将保存在/path/on/host ,您可以备份它,将其复制到其他计算机,然后使用相同的卷重新运行您的容器。

  • 创build并安装数据容器。

    创build数据容器: docker create -v /dbdata --name dbstore training/postgres /bin/true使用--volumes-from运行其他容器: docker run -d --volumes-from dbstore --name db1 training/postgres ,则由db1生成的所有数据将dbstore在容器dbstore的卷中。

有关更多信息,请参阅Docker卷的官方文档 ,简单地说, volumes就是主机上的所有容器数据的目录,因此您可以使用之前用于备份/共享数据的任何方法。

我可以像对待图像一样向docker中心推送音量吗?

不,docker图像是你交付的东西,但数据不是。 你可以使用任何你喜欢的方法来备份/保存/分享你的数据,但是把数据推送到dockerregistry来分享它没有任何意义。

我可以做备份等吗?

是的,正如上面张贴:-)

每个容器都有自己的独立于主机文件系统的文件系统。 如果使用-v标志运行容器,则可以装入卷,以便主机和容器可以看到相同的数据(如在docker run -v hostFolder:containerFolder中)。

您打印的第一个输出描述了“/var/lib/docker/volumes/fac362…80535/_data”(主机)挂载到“/ webapp”(容器)的挂载卷(因此挂载)。

我假设你没有使用-v,因此该文件夹没有装入,只能在容器文件系统中访问,你可以在“/ var / lib / docker / volumes / blog_postgres-data / _data”中find它。 如果您删除容器(docker -rm),则该数据将被删除,因此安装该文件夹可能是一个好主意。

至于你可以从Windows访问这些数据的问题。 据我所知,docker for windows在Windows 10中使用bash子系统。我将尝试运行bash for windows10并转到该文件夹​​,或者了解如何从Windows 10访问linux文件夹。在此页面查看FAQ在Windows 10中的Linux子系统。

更新:您也可以使用docker cp在主机和容器之间复制文件。