我正在学习docker,我对数据卷实际存在的地方感到困惑。

我正在使用Windows的Docker Desktop。(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": ""
    }
]

然而,我没有看到这一点,我得到了以下:

$ 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"
    }
]

有人能帮帮我吗?我只想知道我的数据量在哪里是在主机上吗?如果是这样,我怎么能得到它的路径?


当前回答

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

对我也有用(Windows 10家庭版),很棒的东西。

其他回答

如果你使用windows,你的docker文件(在这种情况下你的卷)存在于docker用于windows Hyper-V或WSL的虚拟机上。但是,如果您需要访问这些文件,您可以复制容器文件并将它们存储在您的机器上,并以这种方式访问数据。

docker cp container_Id_Here:/var/lib/mysql path_To_Your_Local_Machine_Here

对我来说,我找到了我的书

\\wsl$\docker-desktop-data\data\docker\volumes\

使用WSL2和Windows 21H1

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

docker inspect <container_id>将列出容器配置,在Mounts部分可以看到更多关于持久化层的细节。

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

我是Windows + WSL 2 (Ubuntu 18.04)。

在Windows文件资源管理器中输入:

适用于Docker 20.10版。+: \\wsl$\docker-desktop-data\data\docker\volumes 对于Docker引擎v19.03: \\wsl$\ Docker -desktop-data\version-pack-data\community\ Docker \volumes\

每个卷有一个目录。

如果你在windows上使用Docker For windows,那么Docker通过VM (MobyLinuxVM)工作。您的卷(如everting else)在此VM中!而是如何找到他们:

# get a privileged container with access to Docker daemon
docker run --privileged -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker alpine sh

# in second power-shell run a container with full root access to MobyLinuxVM
docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh

# switch to host FS
chroot /host

# and then go to the volume you asked for
cd /var/lib/docker/volumes/YOUR_VOLUME_NAME/_data