找不到带有 docker 的 Ubuntu WSL

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

详情请参阅 https://docs.docker.com/docker-for-windows/wsl/

Not able to change to WSL2 and not able to install docker:

docker wls

143551 次浏览

正如泰勒在他的评论中写道,您需要从 WSL 连接到 Docker 桌面。
在您附加的图像中有一个复选框 expose daemon on ... Check this box.
现在您需要 docker cli,您可以安装 Linux vm,然后在刚才安装的 Linux vm 中安装 docker。
Then run which docker and copy this file to your windows computer.
Copy the docker executable into /usr/local/bin on your WSL.
现在在 WSL 中运行以下命令

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc
. ~/.bashrc

This worked for me on WSL 1.

这是我找到的关于所有过程的指南

我遵循以下步骤: https://learn.microsoft.com/en-us/windows/wsl/install-win10

Also, for docker into ubuntu, I enabled it in docker resources as a final step. 设置 > 资源 > WSL 集成。 译自: 美国《科学》杂志网站(href = “ https://docs.docker.com/docker-for-windows/wsl/”rel = “ nofollow norefrer”) https://docs.docker.com/docker-for-windows/wsl/

假设您的系统中已经有了 wsl 2,那么作为管理员运行 powershell:

run wsl --list --verbose which will give you a list of your wsl running processes:

> wsl --list --verbose
NAME                   STATE           VERSION
Ubuntu-20.04           Running         1

Then to switch it with 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.

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

enter image description here

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

在 windows shell 中:

> 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.

解决此问题的一个选项是重新安装 Docker Desktop (https://learn.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

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

> Stop-Service -Name "com.docker.service"

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

在 windows shell 中测试:

> wsl docker --version
Docker version 20.10.2, build 2291f61

您需要将 WSL 控制台作为 管理员运行。 否则,可能无法识别 docker 命令。

对于我来说,除了右键单击运行 Docker 图标(时钟旁边)并选择“ Switch to Linux Container”外,没有其他方法可以工作

enter image description here

现在我可以使用菜单设置 > 资源 > WSL 集成了。

法布里西奥 · 佩雷拉斯的回答对我很有用,但我不得不经常这样做,这仍然很烦人。 Turns out the 开始顺序 the systems is important too.

开始 码头优先然后是 WSL2之后

我不用 Windows 启动 Docker 桌面,通常已经用 WSL 打开了一个终端。然后就找不到 Docker 了。法布里西奥斯的答案为我工作,因为我关闭 WSL2,然后再次启动时,多克已经运行。

对于那些仍然有这个问题,我的一些符号链接魔术般地消失了,没有任何重新安装帮助。

确保在 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

I had this issue, for me running

$ ls -l /usr/bin/ | grep docker

显示了所有正确的符号链接,但我看到了以下内容:

which docker
/mnt/c/Program Files/Docker/Docker/resources/bin/docker

修正的方法是简单地将 PATH变量设置为以 /user/bin作为第一个条目

PATH="/usr/bin:$PATH"

从众多的答案来看,似乎有很多因素会导致这个错误,所以你的经验可能会有所不同。


另一个需要检查的好事情是 Docker 桌面实际上正在运行。如果不是,则 which docker将导致 /mnt/c/...目录如上所示。

在删除 Ubuntu 18.04并安装20.04之后,我坚持使用这个错误。

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

这是什么工作对我来说,去设置-> 资源和切换“ Ubuntu”,然后错误消失:)

enter image description here

Make sure that you have a distro that is compatible with wsl2:

Https://ubuntu.com/wsl

enter image description here

在我的例子中,集成在 docker-app 中被正确设置,WSL2是默认的 wsl,我无法解决取消注册 wsl docker 实例并像其他答案中提到的那样重新启动 docker 服务的问题。

过了一段时间,我注意到命令 docker-compose成功地工作了。

我在目录 usr/bin中查找所有 docker 命令,这是 docker-compose所在的路径(which docker-compose) ,因此我发现正在运行 ls -l /usr/bin | grep docker

drwxrwxrwx  1 root   root          48 Nov 29 10:59 docker
lrwxrwxrwx  1 root   root          56 Nov 29 10:59 docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose*
lrwxrwxrwx  1 root   root          59 Nov 29 10:59 docker-compose-v1 -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose-v1*
lrwxrwxrwx  1 root   root          71 Nov 29 10:59 docker-credential-desktop.exe -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-credential-desktop.exe*
lrwxrwxrwx  1 root   root          50 Nov 29 10:59 hub-tool -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/hub-tool*

出于某种奇怪的原因,docker 不是一个符号链接,而是一个目录。

我解决了移除目录并手动重新创建符号链接的问题:

rm -rf /usr/bin/docker
sudo ln -s /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker /usr/bin/docker

参考资料下的 WSL 集成没有为我显示出来。

我必须在常规设置中取消选中“使用基于 WSL2的引擎”,应用,然后再次检查,应用,然后 WSL 集成出现在资源中,我可以点击 Ubuntu 滑块。

Switch to linux containers in docker desktop then it will work.

在我的例子中,我的发行版是在 WSL 1模式中运行的

要检查 WSL 模式,运行:

wsl.exe -l -v

要将现有的 Linux 发行版升级到 v2,运行:

wsl.exe --set-version (distro name) 2

要将 v2设置为以后安装的默认版本,请运行:

wsl.exe --set-default-version 2

有时最简单的解决方案是最有效的解决方案,如果您是第一次安装 Docker 桌面,请确保您重新启动窗口的效果采取更改。这并不能保证有效,但总是值得一试。

对于我来说,在 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

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

我在使用 Ubuntu-20.04(WSL2)和 Docker Desktop (v4.11.1)时也遇到了同样的问题。对我来说,WSL 集成和其他标志都已经设置好了,但是我仍然得到了:

在这个 WSL2发行版中找不到命令“ docker”。

我遵循@r590的方法,关闭然后打开 WSL 集成:

资源 > WSL 集成

然后我就成功了。

我也有同样的问题,但是,对我来说,我使用不同的 Windows 帐户(管理员)安装 docker,因为我的默认帐户(在域下)是一个标准用户,没有管理员访问权限。

在安装 docker 之后,我启动了 docker,并得到一个错误,我不是 docker-users组的一部分,所以我使用我的管理员帐户启动 docker。Docker 已经启动,但是它无法看到 WSL 集成。与下面的截图类似。

Docker config missing WSL integration

修复它为我是添加域帐户到 docker-users和重新启动我的机器。之后,WSL 在配置中可见。

# For local account
net localgroup docker-users "your-user-id" /ADD


# For domain account
net localgroup docker-users "DOMAIN\your-user-id" /ADD

Docker config showing the WSL integration