当使用Docker桌面版的WSL运行时,Docker卷位于何处?

58

我正在使用Windows Subsystem Linux(WSL),Ubuntu作为Windows 10下的客户端操作系统。现在我在Windows主机上安装了Docker Desktop,并在Docker设置中启用了WSL集成。到目前为止,这个工作做得很好,我可以从我的WSL Ubuntu客户端访问运行在Windows主机上的Docker守护进程。

现在我想知道在这种设置下所有的Docker卷和其他数据存储在哪里。通常它们位于/var/lib/docker下,但似乎在使用WSL时并非如此。当运行df -h时,我可以看到以下与Docker相关的行:

/dev/sdd        251G  3.1G  236G   2% /mnt/wsl/docker-desktop-data/isocache
/dev/sdc        251G  120M  239G   1% /mnt/wsl/docker-desktop/shared-sockets
/dev/loop0      244M  244M     0 100% /mnt/wsl/docker-desktop/cli-tools

所以它们似乎在Windows主机上的某个地方。
...但是在哪里呢?

14个回答

115

当我在Docker中创建一个名为shared_data的卷时,我可以在其下找到它。

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

是的,如果您在WSL2(Ubuntu)上使用Docker桌面版,则是这条路径:https://dev59.com/WlgQ5IYBdhLWcg3wLg45#64418064 - Connected Wanderer
当 Docker 引擎处于活动状态时,请在 Windows 资源管理器中搜索此路径。 - GRANZER
我们可以假设,在Docker容器中,WSL不允许通过Windows文件资源管理器编辑WSL文件的标准警告仍然适用吗? - j08691
请注意,这不是与WSL内部的/mnt/wsl路径相同的路径,而只是从Windows“主机”文件系统访问的路径。 - mozboz
在 Docker Desktop 4.13 版本中,它位于 "\wsl.localhost\docker-desktop-data\mnt\wsl\docker-desktop-data\version-pack-data\community\docker\volumes"。 - DinushaMadusanka

50

您可以在一个隐藏的网络共享中找到WSL2的卷。打开Windows资源管理器,并在地址栏中输入 \\wsl$,按下回车键,它会显示您的WSL卷,包括Docker for Windows的卷。


9
跟随Rohaq的回答...将以下内容粘贴到Windows资源管理器中即可查看数据卷: \wsl$\docker-desktop-data\version-pack-data\community\docker\volumes 顺便说一句,我不是Docker专家,但这个技巧对我很有帮助。 - rr789
我在那个卷文件夹里只找到了两个文件,backingFsBlockDevmetadata.db - Matt Fletcher
@MattFletcher 你使用的是什么路径? - Rohaq

19

Windows 10 + WSL2

我在 Windows 10 + WSL2 上运行 Docker Desktop。只需确保运行 Docker Desktop,这样路径就可以从网络访问。

我发现我的卷数据位于

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

enter image description here

请注意,在查找这些网络目录之前,您需要运行Docker桌面版:

enter image description here


1
2022年唯一正确且有效的答案..! - buryo
1
在 Docker 社区版中没有这样的目录。请尝试使用下面提到的 \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes - Dieter Menne
谢谢。使用docker v4.23.0,你的是目前唯一有效的。然而,我不明白。我执行docker volume inspect abc,挂载点显示为/var/lib/docker/volumes/abc/_data,但实际位置是\wsl.localhost\docker-desktop-data\data\docker\volumes\abc_data。路径中卷之前的部分不一样...不知道为什么。 - undefined
有没有办法在WSL命令提示符下访问\wsl.localhost\docker-desktop-data\data\docker\volumes\abc_data? - undefined
你试过/mnt/c/....了吗? - undefined

17

如果你想知道Windows主机上Docker卷的位置,对我而言它们似乎在以下路径:

C:\Users\username\AppData\Local\Docker\wsl\data\ext4.vhdx

C:\Users\username\AppData\Local\Docker\wsl\distro\ext4.vhdx

可以推测,分别是docker-desktop-datadocker-desktop

理论上,这些WSL2实例可以根据此帖子的说明重新定位到替代驱动器以释放磁盘空间;这是从新位置导出、注销和重新导入实例的标准方法。关于标准WSL实例,也在这里描述了这个过程。

(注意 - 我还没有尝试使用docker WSL2实例进行此操作,只是对Ubuntu使用第二个链接中的方法进行了尝试。)


12
这个主题的大多数答案都是关于从Windows侧面获取位置,但我需要访问容器日志文件(与卷的问题相同)从我的WSL分发,Windows路径 \\wsl$ 不是一个选项。
可以在Windows中找到这些文件 \\wsl$\docker-desktop-data\version-pack-data\community\docker\containers
从WSL分发,我可以进入/mnt/wsl/docker-desktop-data/version-pack-data,但它是空的。
最终在这里找到了解决方案:
  1. 从Windows为 docker-desktop-data 创建一个磁盘:
net use w: \\wsl$\docker-desktop-data
  1. 从你的WSL发行版中,将其挂载到docker
sudo mkdir /mnt/docker
sudo mount -t drvfs w: /mnt/docker

现在你可以获取所有你想要的东西,就像我的情况下是日志文件:
ls -l /mnt/docker/version-pack-data/community/docker/containers/

total 0
drwxrwxrwx 4 root root 512 May 19 15:06 3f41ade0891c06725e828853524d73f185b415d035262f9c51d6b6e03654d505


1
如果有人正在寻找卷,那么它们将位于/mnt/docker/data/docker/volumes下。 - Maxi
哇,非常感谢!这真的非常有帮助。我使用这个方法将我的GPG文件传输到容器中,以便在开发容器内进行提交签名。 - undefined

7

Docker Desktop的WSL2功能会创建两个新的wsl2容器docker-desktopdocker-desktop-data,可以通过命令wsl -l -v查看。

NAME                   STATE           VERSION
* Ubuntu-18.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

这就是Docker守护进程实际运行的地方,也是你可以找到寻找的数据的地方。


5

docker run -ti -v host_dir:/app amazing-container将被映射到/mnt/wsl/docker-desktop-data/data/docker/volumes/host_dir/_data/

尽管docker volume inspect amazing-container会告诉您不同的路径(/var/lib/docker/volumes/),但以上是正确的路径。

总之,这些卷的映射为:/mnt/wsl/docker-desktop-data/data/docker/volumes/


你如何查询Docker服务器以返回正确的路径? - Carl in 't Veld
@Carlin'tVeld 将 /var/lib/docker/volumes/ 替换为 /mnt/wsl/docker-desktop-data/data/docker/volumes/ - 0x90
5
我想学习如何从Docker服务器中提取数据。同时,我发现在我的电脑上路径不同:\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\myvol_data。请参考https://github.com/microsoft/WSL/discussions/4176。奇怪的是,在尝试访问wsl2中的文件夹时,我发现/mnt/wsl/docker-desktop-data/version-pack-data为空。 - Carl in 't Veld
1
@Carlin'tVeld 我也是,我在GitHub的讨论中找到了一个解决方案,并发布了一个答案 - AymDev
1
为什么WSL开发人员会将挂载路径指向与“docker volume inspect”输出不同的位置?太糟糕了。 - j7skov
1
@j7skov 或许是为了持久化和巩固 Docker 在 WSL 和 Windows 中的运行方式。 - 0x90

3
在我的情况下,我在WSL2上安装了Docker Desktop,运行于Windows 10 Home系统。我发现我的镜像文件位于:
\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2

所有图像文件都存储在那里,并已分成几个带有长字符串名称的文件夹。当我查看每个文件夹时,我可以在“diff”文件夹中找到所有真实的图像文件。
尽管终端显示路径为“var/lib/docker”,但该文件夹不存在,实际文件也未存储在其中。我认为没有错误,“var/lib/docker”只是链接或映射到实际文件夹,有点类似的东西。 在Windows中,我们也使用mklink将两个文件夹连接起来,这很相似,对吧?


确实,这是正确的。物理图像及其层在此文件夹中组织。但请注意它们也与 /volumes 文件夹一起工作。 - Mário Meyrelles

2
如果您正在Windows主机上运行Docker,并使用Docker Desktop,则可以在\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\访问卷(从Windows资源管理器中搜索此路径并确保Docker引擎正在运行)。
当运行Docker桌面应用程序时,该应用程序会创建自己的Linux VM或使用WSL来运行Docker容器,而路径/var/lib/docker/volumes/是从该VM内部获取的。这些卷以可挂载的.vhdx文件的形式创建。
C:\Users\username\AppData\Local\Docker\wsl\distro\

但是直接访问它很棘手。

参考:Google 如何从 Windows 访问 WSL 文件


2
当使用WSL和Docker时,您可以在docker-desktop-data下找到卷和其他数据。

volume and other data in docker


1
我的系统没有主机,但其他所有内容都是相同的。一旦你进入docker目录,权限就会被锁定。我使用了sudo ls volumes命令最终看到了我的数据。 - Ben Ogorek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接