找不到带有 docker 的 Ubuntu WSL

suk*_*uki 42 docker windows-subsystem-for-linux

$ docker在此 WSL 1 发行版中找不到该命令。我们建议将此发行版转换为 WSL 2 并在 Docker 桌面设置中激活 WSL 集成。

有关详细信息,请参阅https://docs.docker.com/docker-for-windows/wsl/

无法更改为 WSL2 且无法安装 docker:

码头工人

pus*_*ack 62

您需要转到 docker 桌面设置,并在“资源 - > WSL 集成”中启用与您的发行版的集成。

在此处输入图片说明

  • 仅在安装“wsl_update_x64.msi”后才有效。请参阅此处的步骤 3 https://docs.docker.com/docker-for-windows/wsl/#preventions (4认同)
  • 这+乔伊的回答对我有用。多谢你们。 (3认同)
  • 我的 Docker 桌面应用程序上没有 WSL 集成,我是否必须升级 Docker 桌面才能获得 WSL 集成功能? (2认同)
  • 这对其他人来说可能是显而易见的,但除了您选择的 Fedora/Ubuntu/XXX Linux 发行版之外,Docker 还将安装/创建 WSL 发行版 docker-desktop 和 docker-desktop-data。您可能需要在 PowerShell 中运行 & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon。我必须“SwitchDaemon”两次,第一次是为了让我能够进入 Docker 桌面设置,但它没有显示 WSL 集成。所以我再次运行“SwitchDaemon”,它愿意显示 WSL 集成。由于一些令人恼火的系统更新,我不得不经历这个过程。 (2认同)
  • 在我的开始工作之前必须执行此操作:打开 Docker Desktop 并单击右上角的“故障排除”图标。单击“清理/清除数据”并仅选择“WSL 2”,然后单击“删除”。重新启动码头工人。docker-desktop-data 在此之前已停止。 (2认同)

joe*_*uch 57

假设您的系统中已经有 wsl 2,请以管理员身份运行 powershell:

runwsl --list --verbose它将为您提供 wsl 运行进程的列表:

> wsl --list --verbose
  NAME                   STATE           VERSION
  Ubuntu-20.04           Running         1
Run Code Online (Sandbox Code Playgroud)

然后将其切换为 wsl --set-version <your proc> 2

> wsl --set-version Ubuntu-20.04 2
Conversion in progress, this may take a few minutes...
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
Conversion complete.
Run Code Online (Sandbox Code Playgroud)

  • 如果您有多个版本,您可能还想将其设置为默认发行版:`wsl --set-default Ubuntu-20.04` (3认同)

Fab*_*ira 31

尽管自安装以来已经启用了集成 WSL,但我的问题似乎是一样的。

在 Windows 外壳中:

> wsl docker --version

The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.
Run Code Online (Sandbox Code Playgroud)

解决此问题的一个选项是重新安装 Docker 桌面(https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/configure-docker-daemon#how-to-uninstall-docker),但不要不需要这样做。

以下步骤对我有用(我在https://github.com/docker/for-win/issues/7039找到)。

打开 windows shell(可能以管理员身份),然后运行:

> wsl -t docker-desktop
> wsl --shutdown
> wsl --unregister docker-desktop
Run Code Online (Sandbox Code Playgroud)

然后转到 windows 服务,停止 Docker 桌面服务,或者以管理员身份在 windows shell 中运行命令来执行此操作:

> Stop-Service -Name "com.docker.service"
Run Code Online (Sandbox Code Playgroud)

最后,重新启动 Docker 桌面应用程序。

在 windows shell 中测试:

> wsl docker --version
Docker version 20.10.2, build 2291f61
Run Code Online (Sandbox Code Playgroud)

  • 我必须右键单击 docker 图标(系统任务栏)并选择 **重新启动 Docker...** (6认同)
  • 当我右键单击蓝鲸时,没有重新启动菜单项。但是,错误(故障排除)图标中有一个重新启动。但重新启动对我来说不起作用。 (2认同)
  • 这是唯一帮助我的方法 (2认同)

小智 20

删除 Ubuntu 18.04 并安装 20.04 后,我遇到了这个错误。

即使启用了 WSL 2,我仍然面临这个错误。

这对我有用,进入设置 --> 资源并切换“Ubuntu”,然后错误消失:)

在此输入图像描述


小智 15

wsl对我来说,在终端中运行以下命令是有效的:

sudo apt-get update
apt-cache policy docker-ce
sudo apt-get install -y docker-ce
sudo apt-get install docker-compose
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

来源: https: //www.srcmake.com/home/fabric


小智 12

对我来说,没有任何效果,除了:右键单击正在运行的 Docker 图标(时钟旁边)并选择“切换到 Linux 容器”

在此输入图像描述

现在我们开始 !现在我可以使用菜单“设置”>“资源”>“WSL 集成”。


r59*_*590 8

资源下的 WSL 集成没有向我显示。

我必须在常规设置下取消选中“使用基于 WSL2 的引擎”,然后应用,然后再次选中它,应用,然后 WSL 集成就会显示在资源下,我可以单击 Ubuntu 滑块。


age*_*nzo 6

对于那些仍然有问题的人来说,我的一些符号链接神奇地消失了,并且重新安装也没有任何帮助。

确保 WSL2 安装中有以下符号链接:

$ ls -l /usr/bin/ | grep docker
lrwxrwxrwx 1 root   root          56 Jul 14 13:01 com.docker.cli -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/com.docker.cli
lrwxrwxrwx 1 root   root          48 Jul 14 13:01 docker -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker
lrwxrwxrwx 1 root   root          56 Jul 14 13:01 docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose
lrwxrwxrwx 1 root   root          59 Jul 14 13:01 docker-compose-v1 -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose-v1
lrwxrwxrwx 1 root   root          71 Jul 14 13:01 docker-credential-desktop.exe -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-credential-desktop.exe
lrwxrwxrwx 1 root   root          50 Jul 14 13:01 hub-tool -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/hub-tool
lrwxrwxrwx 1 root   root          48 Jun 29 09:27 notary -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/notary
Run Code Online (Sandbox Code Playgroud)


dav*_*v_i 5

我遇到了这个问题,对于我来说

$ ls -l /usr/bin/ | grep docker
Run Code Online (Sandbox Code Playgroud)

根据这个答案显示了所有正确的符号链接,但是我看到了以下内容:

which docker
/mnt/c/Program Files/Docker/Docker/resources/bin/docker
Run Code Online (Sandbox Code Playgroud)

解决方法是简单地将PATH变量设置为/user/bin第一个条目

PATH="/usr/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

从众多答案来看,似乎有很多因素可能导致此错误,因此您的情况可能会有所不同。


另一件需要检查的好事情是 Docker Desktop 是否实际运行。如果不是,which docker将产生/mnt/c/...上述目录。


Shm*_*uel 4

正如 Taylor 在评论中所写,您需要从 WSL 连接到 docker 桌面。
在您附加的图像中有一个复选框expose daemon on ... 选中此框。
现在你需要 docker cli,你可以安装 Linux 虚拟机,然后在刚刚安装的 Linux 虚拟机中安装 docker。
然后运行which docker该文件并将其复制到您的 Windows 计算机。
将 docker 可执行文件复制到/usr/local/binWSL 上。
现在在 WSL 中运行以下命令

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc
. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

这对我在 WSL 1 上有用。

这是我在所有过程中找到的指南