WSL2 无法连接到 Docker 守护进程

Dut*_*h77 34 docker windows-subsystem-for-linux docker-desktop docker-daemon wsl-2

这是我的设置:

  • Windows 10 PRO - build 19041.153 - 内部程序 - 慢环
  • Ubuntu 18.04LTS WSL2 模式下的子系统
  • Docker for desktop 2.2.0.4 - 启用与我的 Ubuntu 子系统的 WSL2 集成

我目前被迫使用Windows进行开发,所以我成为了microsoft Insider成员并以WSL2模式安装了ubuntu。Docker 桌面支持 WSL2 的集成,所以我尝试了......一周以来它完美无缺。今天电脑重启后,我无法再次运行docker。Ubuntu 可以看到从 Docker 桌面注入的二进制文件,但它无法再连接到 Windows 托管的 docker 守护进程。

当我调用 subsys 终端时,docker info它返回

$ docker info
Client:
 Debug Mode: false

Server:
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
errors pretty printing info
Run Code Online (Sandbox Code Playgroud)

或与 docker-compose up

ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过的:

  • 使用DOCKER_HOST=localhost:2375, DOCKER_HOST=tcp://localhost:2375, DOCKER_HOST=127.0.0.1:2375, DOCKER_HOST=tcp://127.0.0.1:2375=>等 envs 公开没有 TLS 的守护进程
  • 卸载 Docker 桌面并安装以前的版本
  • 关闭win防火墙

我真的,真的需要这个来工作。感谢您的任何想法。最奇怪的是它昨天有效,从那时起我没有对系统进行任何更改......

Pat*_*cio 56

我知道这对于目前的问题可能已经过时,但这应该可以为我们节省宝贵的时间,尤其是当 Windows 20H1=2004 将于本月(2020 年 5 月)投入生产时。

  操作系统版本:Windows 10 教育(与企业相同,是专业版的超集)。
  版本:2004
  内部版本(操作系统版本):19041.264
  其他:Windows 功能体验包 120.2202.130.0。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Shell : WSL Terminal

首先,我之前安装了WSL v1,然后执行升级到WSL v2 的过程,并显示此错误:“错误:无法连接到 tcp://localhost:2375 处的 Docker 守护程序。docker 守护程序是否正在运行?”。

其次,为了解决这个问题,我按照此处说明的说明进行操作:Link,并且它起作用了。

第三,经过一些测试,我认为升级中缺少的更改是从 shell 的启动脚本中删除了 DOCKER_HOST 变量。

总结:就我而言,永久修复程序应遵循以下步骤

  1.测试是否是您取消设置 DOCKER_HOST 变量的情况(见下图)。

  2.如果错误在上一步中消失,那么是时候修复更改,删除 shell 启动脚本中 DOCKER_HOST 变量的设置(在我的情况下是$HOME/.bashrc)。
    评论了这个:
      #export DOCKER_HOST=tcp://localhost:2375
      #export DOCKER_BUILDKIT=1

      注意:还包括 DOCKER_BUILDKIT。

  3.关闭并打开终端。

  在步骤 1 中测试: 在此处输入图片说明

祝你好运!!

  • 对我来说,它在取消设置旧变量(从 .bashrc 中删除)后起作用。谢谢! (10认同)
  • 我的问题是为什么 Docker 一开始就没有清楚地记录下来! (2认同)
  • 谢谢@Patricio,你的解决方案对我有用。我的错误是,当 Docker Desktop 已经在管理所有这些内容时,我在 WSL 中安装了“docker-compose”! (2认同)
  • 按照链接文章中的说明进行操作对我有用。我没有“DOCKER_HOST”环境变量,因此我需要遵循完整的说明并安装 Docker Desktop Edge,它运行得很好。 (2认同)
  • 对我来说,关键是卸载 docker-ce 和 docker-ce-cli,它们在我之前使用 WSL v1 时仍然存在。链接资源的最佳提示:*“一些可用的教程或建议可能会令人困惑,因为这次您不应该在 WSL Linux 发行版下安装或配置与 Docker 相关的任何内容。”* (2认同)

小智 32

在 Docker 桌面应用程序上,我必须手动启用我的发行版集成

Settings > Resources > WSL Integration
Run Code Online (Sandbox Code Playgroud)

  • 这为我解决了这个问题__不止一次__!如果您以前做过此操作,请再次检查。我发现“我的默认 WSL 发行版”的复选框已选中,但“其他发行版”下的“Ubuntu”开关关闭了。 (8认同)

小智 23

如果它可以帮助遇到此问题的其他任何人,那么对我来说,结果是我的子系统突然(并且“自行”)在 docker 的 RESOURCES > WSL INTEGRATION 设置中被勾选。

  • 这正是发生在我身上的事情。我勾选了“Ubuntu”集成,等了大约 30 秒后它再次工作了。非常感谢老兄! (4认同)
  • 此处相同.. * 再次勾选它 * 运行 `wsl --shutdown` * 再次启动 WSL2 发行版 * 仍然 `docker ps` 响应 `Cannot connect to the Docker daemon at...` 你们需要重新启动吗? (3认同)
  • docker 更新后偷偷取消勾选。手动勾选后 Wsl 可以再次连接:/ (2认同)

Yag*_*rea 14

我尝试过很多东西,以及对我有用的东西,但没有人提到要尝试:

(来自 Windows Powershell)

wsl --set-default <my-distro>
Run Code Online (Sandbox Code Playgroud)

然后在那里,我可以连接到 docker 而无需更改DOCKER_HOSTvar。


Nag*_*gev 13

我已经按照建议安装了适用于 Windows 的 Docker,以便将其与WSL 2一起使用,这确实会为您启动 docker 守护进程。但我不需要它提供的所有奇特功能,因此将其删除,并很高兴看到释放了大约 4GB 空间,并且系统托盘中没有额外的图标。

现在,如果我需要运行 docker 命令,我只需开始:

sudo dockerd &
Run Code Online (Sandbox Code Playgroud)

这样我就可以让它在同一个 shell 的后台运行。请注意,在本示例中我的设置sudo​​没有密码。如果需要密码,我可以sudo dockerd打开另一个终端选项卡。

尽管这是一种快速的临时解决方案,但我发现它会导致网络问题,因此我不推荐它,而更喜欢使用轻型虚拟机


小智 10

1.打开Windows docker桌面-->设置-->常规-->在没有TLS的情况下禁用在tcp://localhost:2375上公开守护进程

图像1

2.然后转到设置 --> 资源 --> WSL 集成 --> 取消选中启用与我的默认 WSL 发行版的集成并关闭与发行版的集成

图像2

3.点击应用并重启

4.然后去ubuntu试试docker ps
docker ps 如果不行的话继续运行以下命令 unset DOCKER_HOST禁用DOCKER_HOST

图像3

今天我刚刚尝试成功

祝你好运


小智 -1

您可以考虑将您的版本升级到 19582.1000 ,这对我有用。

看到这个问题

在此输入图像描述