如何访问 Docker 桌面使用的 wsl2?

Posted

技术标签:

【中文标题】如何访问 Docker 桌面使用的 wsl2?【英文标题】:How can I access wsl2 which is used by Docker desktop? 【发布时间】:2022-01-23 17:30:36 【问题描述】:

我想使用 rsync 将 Docker 映像从我的 Windows10 PC 传输到另一台 Fedora。我不能使用 WSL,我需要 WSL2,正如编译器所说:

ubu@DESKTOP-QL4RO3V:/mnt/c/Windows/system32$ docker images                                                                                                                                                                                      
The command 'docker' could not be found in this WSL 1 distro.                                                           
We recommend to convert this distro to WSL 2 and activate                                                               
the WSL integration in Docker Desktop settings.                                                                                                                                                                                                 
For details about using Docker Desktop with WSL 2, visit:                                                                                                                                                                                       
https://docs.docker.com/go/wsl2/ 

但我认为,由于我有 Docker 桌面,它正在使用 WSL2:

但我不知道如何运行我自己使用的 wsl2 Docker。

PS C:\Users\antoi> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         1
  docker-desktop-data    Running         2
  docker-desktop         Running         2

【问题讨论】:

请说明您所指的“访问”类型。 在 Docker Desktop 的配置页面上有一个使用基于 WSL2 的引擎的选项,检查它,它应该可以在 WSL2 之上运行 当然@MathiasNikkel Docker 桌面上的配置页面在哪里? 在您的屏幕上,标题上有一个设置选项,那里有一个常规选项卡,此配置如下所示:[link]cdn.discordapp.com/attachments/784092634532675626/… 【参考方案1】:

Docker 桌面映像、容器和卷存储在特殊的 docker-desktop-data 中。正如this Super User question 和我在那里的回答中所述,docker-desktop-data 不可引导(按设计)。

如果您真的必须访问文件系统,我已经记录了一种方法可以在那里进行。但总的来说,您应该不需要这样做。

改为使用普通的 docker 命令(来自 WSL2、PowerShell 或 CMD)将图像保存到 tar 文件中,如 this answer 中所述:

docker save -o <image.tar> <image_name>

然后使用rsync或其他方式传输文件,并在目标机器上,通过以下方式导入:

docker load -i <image.tar>

同样,这是来自 WSL2、PowerShell 或 CMD。但在您的情况下,Ubuntu 实例是 WSL1。这对 Docker 不起作用。您需要将其转换为 WSL2。

以防万一,我始终建议在转换您的实例之前对其进行备份。来自 PowerShell:

wsl --export Ubuntu ubuntu_backup.tar

然后,一旦你有了备份:

wsl --set-version Ubuntu 2
wsl --set-default-version 2 # if desired

转换后,在 Ubuntu 中运行 docker 时应该不会看到该错误。


旁注——Docker Desktop 将docker 命令“注入”到您在“设置”的“WSL 集成”选项卡中设置的任何 WSL2 实例中。这应该默认为您的“默认”WSL2 实例,该实例(从您的屏幕截图中)是 Ubuntu。 “真正的”docker 命令在 docker-desktop 内部,但它已为您链接到 Ubuntu。

因此,默认情况下,您应该在您的 Ubuntu 实例中直接拥有所有 docker 功能。 docker-desktopdocker-desktop-data 都不是为最终用户直接使用而设计的。

【讨论】:

感谢您的回答 NotTheDr01ds。所以我应该升级我的wsl? 啊,是的。我没有注意到 Ubuntu 实例设置为版本 1。我会更新我的答案,但是是的。首先等待编辑的路线,以确保。 如果您想尝试一下,您也应该能够从 PowerShell(或 CMD)中使用它。应该不需要任何额外的东西来工作。

以上是关于如何访问 Docker 桌面使用的 wsl2?的主要内容,如果未能解决你的问题,请参考以下文章

当 Docker 桌面在 WSL2 中运行时,bash 中的长工作目录

hostconfig.json 在哪里(Docker 桌面 + WSL2 环境)

WSL2 和 Docker 桌面上的 Postgres 卷挂载:PGDATA 文件夹上的权限被拒绝

使用 WSL2 在 Docker Desktop 上运行的容器没有实时输出

使用 WLS2 在 Docker 桌面上启用 Ingress 控制器

在 Windows 10 Home 上使用 WSL2 上的 Docker Desktop 时,如何更改 docker 映像的位置?