繁体   English   中英

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

[英]Where are Docker volumes located when running WSL using Docker Desktop?

I am running Windows Subsystem Linux (WSL) with Ubuntu as client OS under Windows 10. Now I installed Docker Desktop on the Windows host and enabled the WSL integration in the Docker settings. 到目前为止一切正常,我可以从我的 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 主机上的某个地方。
... 但是哪里?

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

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

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

如果您想知道 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 使用第二个链接中的方法。)

Docker Desktop 的 WSL2 特性创建了两个新的 wsl2 容器 docker docker-desktop和 docker docker-desktop-data ,可以通过命令wsl -l -v看到

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

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

wsl2 kernel 中的卷映射如下:

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/

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

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

所有的图像文件都存储在那里,并被分隔到几个具有长字符串名称的文件夹中。 当我查看每个文件夹时,我可以在“diff”文件夹中找到所有真实的图像文件。
虽然终端显示路径“var/lib/docker”,但该文件夹不存在,实际文件也没有存储在那里。 我认为没有错误,“var/lib/docker”只是链接或映射到真正的文件夹,就像那样。 在windows中,我们也是用mklink来链接两个文件夹的,差不多吧?

If you are running Docker on Windows host, using Docker Desktop, you can access the volumes at \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\ (search this path from windows explorer and确保 docker 发动机正在运行)。

当运行 Docker 桌面应用程序时,应用程序会创建自己的 Linux VM 或使用 WSL 运行 docker 容器和/var/lib/docker/volumes/ volumes 中的路径来自 VM I think/ 卷创建为可挂载的.vhdx文件,位于

C:\Users\username\AppData\Local\Docker\wsl\distro\

但是直接访问它很棘手。

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

关于这个主题的大多数答案都是关于 Windows 端的位置,我需要从我的 WSL 分发中访问容器日志文件(问题与卷相同),Windows 路径\\wsl$不是一个选项。

这些文件可以在 Windows 的\\wsl$\docker-desktop-data\version-pack-data\community\docker\containers找到。
从 WSL 发行版中,我可以 go 到/mnt/wsl/docker-desktop-data/version-pack-data但它是空的。

终于在这里找到了解决方案:

  1. 从 Windows 为 docker 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

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

docker中的体积和其他数据

Windows 10 + WSL2

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

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

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

在此处输入图像描述

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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM