Ubuntu 出错提示 "在 WSL 2 发行版中找不到 'docker' 命令。"

10
我在Ubuntu上运行WSL 2,尝试在计算机上使用Docker时遇到了问题。我已经安装并在后台运行了Docker Desktop,并启用了与Ubuntu的WSL集成。
当我尝试运行简单的docker命令,例如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.
For details about using Docker Desktop with WSL 2, visit: https://docs.docker.com/go/wsl2/ ```
我已经访问了此链接,并按照给出的所有说明启用了与Ubuntu的WSL集成,如下图所示: Docker Desktop Settings screenshot 但是我收到的错误仍然是相同的。有人知道如何解决这个问题吗?
注意:我可以在PowerShell和命令提示符中运行Docker命令(如docker --version),但在Ubuntu中无法识别。

你真的应该包含 wsl -l -v 的输出。 - JeffRSon
@JeffRSon,抱歉,我还在学习StackOverflow的礼仪。我的系统输出显示Ubuntu 22(如下所示)。 - user3877654
@user3877654 不用担心 - 我甚至不确定处理方式是否正确。 要么让你编辑"重复"的问题,要么在此处发布答案(就像您目前所做的那样)。 两者都不是最佳选择,但我们现在先这样处理,同时尝试弄清楚。 然后我们可以稍后“整理”它。 - NotTheDr01ds
5个回答

6
我遇到了这个问题,所以我查看了这个 Docker 链接(你提供的链接已经失效),并按照建议进行了操作。
对我来说,这个方法有效:
  1. In PowerShell, type wsl -l -v and you should get something like this:

      NAME                   STATE           VERSION
    * Ubuntu                 Running         2
      docker-desktop         Running         2
      Ubuntu-20.04           Running         2
      docker-desktop-data    Running         2
    
  2. Go into the Docker Desktop Settings -> Resources -> WSL integration.

  3. Select the WSL 2 distro you are using from the above list (e.g. Ubuntu 20.04 in my case) and Apply & Restart.

现在,在我的发行版中运行版本命令的效果符合预期,我可以在WSL终端内获得所需的所有功能。

:~$ docker -v

6
"Docker Desktop" 应该可以在WSL中集成而无需额外配置。特别是,不需要将文件夹附加到PATH环境变量中。
当然必须确保"Docker Desktop"以及某个WSL发行版已经设置为WSL2:在 "Docker Desktop" 设置中,“通用/使用基于WSL2的引擎”必须被选中,并且`wsl -l -v`应该列出版本2。如果后者不是正确的,则可以通过`wsl --set-version 2`来修复,其中 `` 是前面列表中的名称。请注意,“Ubuntu”和“Ubuntu-22.04”(例如)是不同的。
"Docker Desktop" 通常会与默认的发行版集成。可以从 `wsl -l -v` 中的星号看出选择了哪一个。对我而言,这个值曾经被设置为 "docker-desktop-data" (可能是因为 "Docker Desktop" 在分发版之前安装)。默认发行版可以通过 `wsl --set-default ` 来更改。此外,在 "Docker Desktop" 设置的 "资源/WSL 集成" 中,必须设置 "启用与我的默认WSL distro的集成" 选项。
如果默认发行版之外的其他发行版也要使用docker,则需要在 "资源/WSL 集成" 的发行版列表中明确选择它。如果在运行“Docker Desktop”时最近安装了该其他版,则按“刷新”。
“集成”意味着,据我所知,会自动创建一个链接 `/usr/bin/docker` ,指向 `/mnt/wsl/docker-desktop/cli-tools/usr/bin/docker`。由于 `/mnt/wsl/docker-desktop/cli-tools/usr/bin/docker` 似乎在所有发行版中都是可用的,无论是否进行了集成设置, `/mnt/wsl/docker-desktop/cli-tools/usr/bin` 的存在(或不存在)及其内容可能有助于分析问题。这里应该有 `docker`、`docker-compose` 和其他文件。
ls -l /usr/bin/docker
ls -l /mnt/wsl/docker-desktop/cli-tools/usr/bin

谢谢。我不确定解决方案是什么,但你帮助我找到了问题所在。我的/wsl文件夹由于某种原因嵌套在/mnt/host中。Docker位于/mnt/host/wsl/docker-desktop/cli-tools/usr/bin中。 - David

0

尝试将以下行放入您的Ubuntu的~/.bashrc文件中

PATH+=":/mnt/c/Program Files/Docker/Docker/Resources/bin"

这可能取决于您的挂载点,例如 /c/Program Files/...。您可以使用命令 df 进行检查。

然后启动一个新的 bash shell,并运行 docker


0

我通过以下步骤解决了这个问题,但需要一些变通措施,因为我无法在下载后点击安装必要的WSL2 Linux内核更新

接着我完成了this过程。

然后我不得不去到PowerShell命令行并导航到上述WSL更新的位置,并以管理员模式运行以下命令(而不是在Linux命令行中):

& '.\wsl_update_x64.msi'

这是我能够成功安装更新的唯一方法。

然后在PowerShell命令行 (以管理员模式--而不是linux命令行)中,我运行了

wsl --set-version Ubuntu 2

根据指示这里


0
今天我也遇到了这个问题。在WSL中,我收到一条消息,说我可以从Microsoft Store更新WSL。所以我更新了WSL,之后docker就不再在我的PATH上了。
那是一个慵懒的周六早晨,所以我决定重新启动电脑。神奇的是,问题“解决”了。
也许重新启动WSL发行版就足够了,但此时我没有时间研究是否这是一个好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接