![](/img/trans.png)
[英]Where are my volumes mounted when using Docker Desktop and WSL2?
[英]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-data
和docker-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\
但是直接访问它很棘手。
关于这个主题的大多数答案都是关于 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
但它是空的。
终于在这里找到了解决方案:
docker-desktop-data
创建一个磁盘:net use w: \\wsl$\docker-desktop-data
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.