当 运行 WSL 使用 Docker Desktop 时,Docker 卷位于何处?
Where are Docker volumes located when running WSL using Docker Desktop?
我是 运行 Windows 子系统 Linux (WSL) Ubuntu 作为客户端 OS 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 主机上的某个地方。
...但是在哪里?
Docker Desktop's WSL2 feature新建两个wsl2容器docker-desktop
和docker-desktop-data
,通过命令wsl -l -v
可以看到
NAME STATE VERSION
* Ubuntu-18.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
这是 docker 守护进程实际运行的地方,您可以在这里找到您要查找的数据。
在 docker-desktop-data
下将 docker 与 WSL 一起使用时,您可以找到卷和其他数据
如果您想知道 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 实例可以 re-located 到备用驱动器以根据 this post; that is the standard method for exporting, unregistering, and re-importing an instance from a new location. This process is also described here 释放磁盘 space(关于标准 WSL 实例)。
(警告 - 我自己还没有使用 docker WSL2 实例完成此操作,仅针对 Ubuntu 使用第二个 link 中的方法。)
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/
您可以在隐藏的网络共享下找到 WSL2 卷。打开 Windows 资源管理器,然后在地址栏中输入 \wsl$
。按回车键,它应该会显示您的 WSL 卷,包括 Docker 和 Windows 的卷。
当我在 docker 中创建名为 shared_data 的卷时,我可以在
下找到它
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\shared_data\_data
就我而言,我在 wsl2、windows 10 home 上安装了 docker-desktop。我在
中找到我的图像文件
\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2
所有图像文件都存储在那里,并被分成几个长字符串名称的文件夹。当我查看每个文件夹时,我可以在“diff”文件夹中找到所有真实图像文件。
虽然终端显示路径“var/lib/docker”,但该文件夹并不存在,实际文件也没有存储在那里。我认为没有错误,“var/lib/docker”只是 linked 或映射到真实文件夹,就像那样。
在windows中,我们同样使用mklink到link两个文件夹,很相似吧?
如果您在 Windows 主机上 运行ning Docker,使用 Docker 桌面,您可以访问位于 \wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
的卷(搜索此路径来自 windows 资源管理器并确保 docker 引擎是 运行ning)。
当 运行 宁 Docker 桌面应用程序时,应用程序创建自己的 Linux VM 或使用 WSL 到 运行 docker 容器和路径/var/lib/docker/volumes/
我认为是来自那个虚拟机。卷创建为
处的可装载 .vhdx
文件
C:\Users\username\AppData\Local\Docker\wsl\distro\
但直接访问它很棘手。
关于这个主题的大多数答案都是关于 Windows 方面的位置,我需要从我的 WSL 分发中访问容器日志文件(问题与卷相同) ,Windows 路径 \wsl$
不是一个选项。
可以在 \wsl$\docker-desktop-data\version-pack-data\community\docker\containers
中的 Windows 上找到这些文件。
从 WSL 发行版,我可以转到 /mnt/wsl/docker-desktop-data/version-pack-data
但它是空的。
终于找到解决方法here:
- 从 Windows,为
docker-desktop-data
创建一个磁盘:
net use w: \wsl$\docker-desktop-data
- 从您的 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
我是 运行 Windows 子系统 Linux (WSL) Ubuntu 作为客户端 OS 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 主机上的某个地方。
...但是在哪里?
Docker Desktop's WSL2 feature新建两个wsl2容器docker-desktop
和docker-desktop-data
,通过命令wsl -l -v
NAME STATE VERSION
* Ubuntu-18.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
这是 docker 守护进程实际运行的地方,您可以在这里找到您要查找的数据。
在 docker-desktop-data
下将 docker 与 WSL 一起使用时,您可以找到卷和其他数据如果您想知道 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 实例可以 re-located 到备用驱动器以根据 this post; that is the standard method for exporting, unregistering, and re-importing an instance from a new location. This process is also described here 释放磁盘 space(关于标准 WSL 实例)。
(警告 - 我自己还没有使用 docker WSL2 实例完成此操作,仅针对 Ubuntu 使用第二个 link 中的方法。)
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/
您可以在隐藏的网络共享下找到 WSL2 卷。打开 Windows 资源管理器,然后在地址栏中输入 \wsl$
。按回车键,它应该会显示您的 WSL 卷,包括 Docker 和 Windows 的卷。
当我在 docker 中创建名为 shared_data 的卷时,我可以在
下找到它\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\shared_data\_data
就我而言,我在 wsl2、windows 10 home 上安装了 docker-desktop。我在
中找到我的图像文件\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2
所有图像文件都存储在那里,并被分成几个长字符串名称的文件夹。当我查看每个文件夹时,我可以在“diff”文件夹中找到所有真实图像文件。
虽然终端显示路径“var/lib/docker”,但该文件夹并不存在,实际文件也没有存储在那里。我认为没有错误,“var/lib/docker”只是 linked 或映射到真实文件夹,就像那样。
在windows中,我们同样使用mklink到link两个文件夹,很相似吧?
如果您在 Windows 主机上 运行ning Docker,使用 Docker 桌面,您可以访问位于 \wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\
的卷(搜索此路径来自 windows 资源管理器并确保 docker 引擎是 运行ning)。
当 运行 宁 Docker 桌面应用程序时,应用程序创建自己的 Linux VM 或使用 WSL 到 运行 docker 容器和路径/var/lib/docker/volumes/
我认为是来自那个虚拟机。卷创建为
.vhdx
文件
C:\Users\username\AppData\Local\Docker\wsl\distro\
但直接访问它很棘手。
关于这个主题的大多数答案都是关于 Windows 方面的位置,我需要从我的 WSL 分发中访问容器日志文件(问题与卷相同) ,Windows 路径 \wsl$
不是一个选项。
可以在 \wsl$\docker-desktop-data\version-pack-data\community\docker\containers
中的 Windows 上找到这些文件。
从 WSL 发行版,我可以转到 /mnt/wsl/docker-desktop-data/version-pack-data
但它是空的。
终于找到解决方法here:
- 从 Windows,为
docker-desktop-data
创建一个磁盘:
net use w: \wsl$\docker-desktop-data
- 从您的 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