在Docker中查找数据卷

Bra*_*rad 44 docker docker-for-windows docker-desktop

我正在尝试学习docker,我对数据量实际存在的位置感到困惑.

我正在使用Docker Desktop for Windows.(Windows 10)

在文档中,他们说在对象上运行docker inspect将为您提供源代码: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": ""
    }
]
Run Code Online (Sandbox Code Playgroud)

但我没有看到这个,我得到以下内容:

$ 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"
    }
]
Run Code Online (Sandbox Code Playgroud)

谁能帮我?我只是想知道我的数据量实际存在于我的主机上的位置?如果是这样,我怎么能找到它的路径?

mpc*_*-DT 232

我使用的是 Windows + WSL 2 (Ubuntu 18.04),Docker v19.03。我在这个位置找到了我的 Docker 卷,在 Windows 文件资源管理器中输入:

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
Run Code Online (Sandbox Code Playgroud)

每个卷将有一个目录。

  • 谢谢你,我花了近两个小时寻找答案:))拯救了我的一天。 (8认同)
  • 谢谢你!即使在两年后,这仍然是一个救星。我是在 2020 年写这篇评论的:-) (6认同)
  • 这对我有用,但我也想知道官方文档中是否明确记录了这一点。 (6认同)
  • 更一般地说, `/var/lib/docker/` 映射到 ``\\wsl$\docker-desktop-data\version-pack-data\community\docker\`` (5认同)
  • 神圣的母亲,我不敢相信我花了多长时间才找到您的答案和解决方案。我看了很多可笑的地方。我想这是一个全新的事情。非常感谢。 (4认同)
  • 非常令人困惑 - 这对我来说也是正确的。 (3认同)
  • 为此,我必须首先在 Windows 10 计算机上启用网络检测,否则在文件资源管理器中输入 wsl$ 路径后会收到错误消息。 (2认同)
  • FWIW,可以在上述 Windows 路径中访问卷,但不能通过相应路径“/mnt/wsl/docker-desktop-data/data/”在实际 WSL2 中访问。该目录也在那里,但看起来是空的。 (2认同)

shi*_*zhz 38

你的卷目录是/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": ""
}
]
Run Code Online (Sandbox Code Playgroud)

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

更新以回答评论中的问题:

我主要的好奇心是共享图像等很棒,但我如何分享我的数据呢?

实际上volume是为此目的而设计的(管理Docker容器中的数据),卷中的数据保存在主机FS上并与docker container/image的生命周期隔离.您可以通过以下方式与数据共享数据:

  • 挂载docker卷以托管并重用它

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

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

  • 创建并装入数据容器.

    创建数据容器:docker create -v /dbdata --name dbstore training/postgres /bin/true 运行基于使用此容器上的其它容器--volumes-from:docker run -d --volumes-from dbstore --name db1 training/postgres,然后通过产生的所有数据db1将在容器的容积坚持dbstore.

有关更多信息,您可以参考docker卷的官方文档,简单来说,volumes它只是主机上包含所有容器数据的目录,因此您可以使用之前用于备份/共享数据的任何方法.

我可以像处理图像一样将音量推送到码头中心吗?

不,Docker图像是您提供的东西,但数据不是.您可以使用您喜欢的任何方法备份/保留/共享您的数据,但将数据推送到docker注册表以共享它没有任何意义.

我可以备份等吗?

是的,如上所述:-)

  • 目录“C:\Users\Public\Documents\Hyper-V\虚拟硬盘”为空(Wondows 10 Enterprise) (8认同)
  • 目录“C:\Users\Public\Documents\Hyper-V\Virtual Hard disks”对我来说也是空的 (3认同)

cra*_*eem 28

为了 Windows 10 + WSL 2 (Ubuntu 20.04), Docker version 20.10.2, build 2291f61

Docker 工件可以在

DOCKER_ARTIFACTS == \\wsl$\docker-desktop-data\version-pack-data\community\docker

数据量可以在

在此处输入图片说明

DOCKER_ARTIFACTS\volumes\[VOLUME_ID]\_data

在此处输入图片说明

  • 太棒了,非常感谢。对于仍然感到困惑的 Windows 用户,只需将此路径 \\wsl$\docker-desktop-data\version-pack-data\community\docker 直接复制粘贴到文件资源管理器中,它就会工作:D (2认同)

小智 20

在 windows 主机上运行基于 linux 的容器时,实际卷将存储在 linux VM 中,并且在主机的 fs 上不可用,否则 windows 上运行的 windows => C:\ProgramData\Docker\volumes\

docker inspect <container_id>将列出容器配置,下支架部分看到关于持久层的更多细节。

更新:不适用于在WSL 上运行的 Docker 。

  • 您的答案是正确的“当在 Windows 主机上运行基于 Linux 的容器时,实际卷将存储在 Linux VM 中,并且在主机的文件系统上不可用”我在“C:\Users\Public\”中找不到任何项目Documents\Hyper-V\虚拟硬盘”文件夹。 (2认同)

小智 11

如果您启用了 wsl2,您可以在文件资源管理器中找到它 \\wsl$\docker-desktop\mnt\host\wsl\docker-desktop-data\data\docker


小智 9

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
Run Code Online (Sandbox Code Playgroud)

也为我工作(Windows 10 家庭版),很棒的东西。


Car*_*las 9

在启用 WSL2 的情况Windows 11Docker Desktop v4.15.0,导航到卷文件夹的路径是\\wsl.localhost\docker-desktop-data\data\docker\volumes


小智 8

如果您发现 \\wsl$ 输入或记住很困难,Windows 10 2004 版及更高版本中有一种更加 GUI 友好的方法。借助 WSL 2,您可以通过文件资源管理器中的新 Linux 图标安全地导航到所有特殊 WSL 共享:

Linux 图标显示为文件资源管理器中文件夹窗格中最后一个可滚动项目

从那里您可以深入到(例如)\docker-desktop-data\data\docker\volumes,如其他答案中所述。

文件资源管理器中的 \wsl.localhost\docker-desktop-data\data\docker\volumes

有关更多详细信息,请参阅Microsoft 官方 WSL 文件系统文档,其中提到了这些访问方法。对于技术好奇的人来说,微软的深入视频应该可以回答很多问题。


小智 7

就我而言,我在 wsl2、windows 10 home 上安装 docker-desktop。我找到我的图像文件

\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2
\\wsl$\docker-desktop-data\version-pack-data\community\docker
Run Code Online (Sandbox Code Playgroud)

容器、图像卷信息都在那里。

所有图像文件都存储在那里,并被分成几个具有长字符串名称的文件夹。当我查看每个文件夹时,我可以在“diff”文件夹中找到所有真实的图像文件。

虽然终端显示路径“var/lib/docker”,但该文件夹不存在并且实际文件不存储在那里。我认为没有错误,“var/lib/docker”只是链接或映射到真实文件夹,类似这样


Waq*_*med 6

您可以在 Docker 桌面(Windows)的以下路径中找到与主机关联的卷

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
Run Code Online (Sandbox Code Playgroud)


ccl*_*oyd 6

对我来说,我发现我的卷在

\\wsl$\docker-desktop-data\data\docker\volumes\
Run Code Online (Sandbox Code Playgroud)

使用 WSL2 和 Windows 21H1


Kon*_*ard 5

我发现我使用 WSL 2 (Ubuntu 20.04) 设置的 Docker 使用以下位置:

C:\Users\UserName\AppData\Local\Docker\wsl\data\ext4.vhdx
Run Code Online (Sandbox Code Playgroud)

UserName你的用户名在哪里。