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

Mat*_*ias 21 docker windows-subsystem-for-linux docker-desktop

我在 Windows 10 下使用 Ubuntu 作为客户端操作系统运行Windows 子系统 Linux (WSL)。现在我在 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
Run Code Online (Sandbox Code Playgroud)

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

小智 63

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

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


Roh*_*haq 26

您可以在隐藏的网络共享下找到 WSL2 卷。打开 Windows 资源管理器,然后\\wsl$在位置栏中键入。按 Enter,它应该会显示您的 WSL 卷,包括适用于 Windows 的 Docker 卷。

  • 要遵循 onRohaq 的答案...将其粘贴到 Windows 资源管理器中以查看数据卷:\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes PS。我不是 Docker 专家,但这个技巧对我帮助很大。 (6认同)

Dev*_*vWL 24

Windows 10 + WSL2

我在 Windows 10 + WSL2 上运行 docker-desktop。只需确保运行 Docker 桌面,以便可以从网络访问该路径。

我在下面找到了我的体积数据

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

在此输入图像描述

请注意,您需要先运行 docker 桌面,然后才能发现这些网络目录:

在此输入图像描述

  • 2022 年唯一正确有效的答案......! (2认同)

小智 18

如果您想知道 docker 卷位于 Windows 主机上的哪个位置,对我来说它们似乎位于:

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

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

据推测,这些分别是docker-desktop-datadocker-desktop

理论上,根据这篇文章,这些 WSL2 实例可以重新定位到备用驱动器以释放磁盘空间;这是从新位置导出、取消注册和重新导入实例的标准方法。此处也描述了此过程(关于标准 WSL 实例)。

(警告 - 我自己还没有对 docker WSL2 实例执行此操作,仅适用于使用第二个链接中的方法的 Ubuntu。)


Aym*_*Dev 13

关于此主题的大多数答案都是关于 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
Run Code Online (Sandbox Code Playgroud)
  1. 从您的 WSL 发行版中,将其安装到docker
net use w: \\wsl$\docker-desktop-data
Run Code Online (Sandbox Code Playgroud)

现在你可以获得你想要的一切,在我的例子中是日志文件:

sudo mkdir /mnt/docker
sudo mount -t drvfs w: /mnt/docker
Run Code Online (Sandbox Code Playgroud)


dan*_*orn 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
Run Code Online (Sandbox Code Playgroud)

这是 docker 守护进程实际运行的地方,也是您可以找到所需数据的地方。


0x9*_*x90 6

wsl2 内核中的卷映射如下:

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 服务器提取数据。与此同时,我发现我这边的路径是不同的:\\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 为空。 (5认同)