【问题标题】:Ubuntu WSL with docker could not be found找不到带有 docker 的 Ubuntu WSL
【发布时间】:2020-12-09 08:50:41
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否在 WSL 环境中使用了 apt install docker?您将需要为您的 Windows 操作系统安装完整的 docker,然后在您的 WSL 环境中安装 docker CLI 工具,将 WSL 的 docker 指向您主机的 docker 端口。这应该会有所帮助:nickjanetakis.com/blog/…

标签: docker windows-subsystem-for-linux


【解决方案1】:

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

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

这在 WSL 1 上对我有用。

Here is guide I found on the all process

【讨论】:

    【解决方案2】:

    我按照以下步骤操作:https://docs.microsoft.com/en-us/windows/wsl/install-win10

    另外,对于 docker 进入 ubuntu,我在 docker 资源中启用它作为最后一步。 设置 > 资源 > WSL 集成。 来自:https://docs.docker.com/docker-for-windows/wsl/

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考
    【解决方案3】:

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

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

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

    然后用 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.
    

    【讨论】:

    • 如果您有多个版本,您可能还想将其设置为默认发行版:wsl --set-default Ubuntu-20.04
    【解决方案4】:

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

    【讨论】:

    • 这个+乔伊的回答对我有用。谢谢大家。
    • 仅在安装wsl_update_x64.msi 后有效。请参阅此处的第 3 步 docs.docker.com/docker-for-windows/wsl/#prerequisites
    • 我的 Docker 桌面应用程序上没有 WSL 集成,是否必须升级 Docker 桌面才能获得 WSL 集成功能?
    • @pushStack 我有同样的问题。我在此发布日期同时安装了 WSL 2 和 Docker 桌面,但它仍然拒绝出现。
    • 这对其他人来说可能很明显,但是除了您选择的 Fedora/Ubuntu/XXX Linux 发行版之外,Docker 还会安装/创建 WSL 发行版:
    【解决方案5】:

    我的问题似乎是一样的,尽管集成 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.
    

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

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

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

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

    在 windows shell 中测试:

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

    【讨论】:

    • 我必须右键单击 docker 图标(系统任务栏)并选择 Restart Docker...
    • 我一直发现在 docker 桌面上恢复出厂设置是唯一有效的方法
    • 这也适用于我,但我几乎每天都必须这样做。有其他人经历过吗?
    • 蓝鲸右键没有重启菜单项。但是,错误(疑难解答)图标中有重新启动。但是重启对我不起作用。
    • 这是唯一对我有帮助的方法
    【解决方案6】:

    您需要以 Admin 身份运行 WSL 控制台。 如果不是,可能无法识别 docker 命令。

    【讨论】:

      【解决方案7】:

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

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

      【讨论】:

        【解决方案8】:

        Fabrício Pereiras 的回答对我有用,但我不得不经常这样做,这仍然很烦人。 结果表明启动顺序系统也很重要。

        先启动Docker,然后启动WSL2

        我不使用 Windows 启动 Docker Desktop,通常已经在 WSL 中打开了一个终端。然后找不到Docker。 Fabricios 的答案对我有用,因为我关闭了 WSL2,然后在 Docker 已经运行时再次启动它。

        【讨论】:

        • 这正是我所做的,但是如果我正在运行 wsl 并且无法为 docker 重新启动,我来这里是为了寻找另一个解决方案?有吗?
        【解决方案9】:

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

        确保您的 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
        

        【讨论】:

          【解决方案10】:

          我遇到了这个问题,我正在跑步

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

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

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

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

          PATH="/usr/bin:$PATH"
          

          从众多的答案来看,似乎有很多事情会导致这个错误,所以你的里程可能会有所不同。


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

          【讨论】:

            【解决方案11】:

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

            即使启用了 WSL 2,我仍然会遇到此错误。

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

            【讨论】:

              【解决方案12】:

              确保您的发行版与 wsl2 兼容:

              https://ubuntu.com/wsl

              【讨论】:

                【解决方案13】:

                在我的情况下,在 docker-app 中正确设置了集成,WSL2 是正确的默认 wsl,我无法解决取消注册 wsl docker 实例并重新启动 docker 服务的问题,如其他答案中所述。

                一段时间后,我注意到命令docker-compose 成功运行。问题仅限于docker 命令。

                我在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
                

                【讨论】:

                  猜你喜欢
                  • 2019-09-15
                  • 1970-01-01
                  • 2020-07-15
                  • 1970-01-01
                  • 2022-06-23
                  • 2022-10-23
                  • 2021-04-21
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多