这是我的设置:

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

目前迫不得已使用Windows进行开发,于是成为了微软的Insider会员,安装了WSL2模式的ubuntu。Docker 桌面支持 WSL2 的集成,所以我试了一下......

一个星期以来,它完美无缺地工作。今天重启电脑后,我无法让docker再次运行。Ubuntu 可以从 Docker 桌面看到注入的二进制文件,但它无法再连接到 Windows 托管的 docker 守护进程。

当我调用 WSL 终端时,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

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

我已经尝试过的:

  • 在没有 TLS 的情况下使用类似DOCKER_HOST=localhost:2375, DOCKER_HOST=tcp://localhost:2375, DOCKER_HOST=127.0.0.1:2375, DOCKER_HOST=tcp://127.0.0.1:2375=> 相同结果的环境公开守护进程
  • 卸载 Docker 桌面并安装以前的版本
  • 关闭 Windows 防火墙

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


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

  操作系统版本:Windows 10 Education(与 Enterprise 相同,是 Pro 的超集)。
  版本:2004
  Build(操作系统版本):19041.264
  其他:Windows 功能体验包 120.2202.130.0。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  外壳:WSL终端

首先,我之前安装了WSL v1 ,然后执行升级到WSLv2的过程,出现了这个错误:“ERROR: Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running?”。

其次,为了修复该错误,我按照此处说明的说明进行操作:链接,它起作用了。

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

摘要:就我而言,永久修复的过程应该是以下步骤

1.测试它是否是你的案例取消设置DOCKER_HOST变量(见下图)。

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

  注意:还包括DOCKER_BUILDKIT

3.关闭并打开终端。

第 1 步  中的测试祝你好运!在此处输入图像描述


如果它可以帮助遇到此问题的其他任何人,那么对我来说,事实证明我的子系统突然(并且“独立”)在 docker 的资源 > WSL 集成设置中被勾选。


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

Settings > Resources > WSL Integration

我已经尝试了很多东西,以及对我有用的东西,但从来没有人提到要尝试:

(来自 Windows Powershell)

wsl --set-default <my-distro>

然后,我可以在不更改DOCKER_HOSTvar 的情况下连接到 docker。


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

现在,如果我需要运行 docker 命令,我会从以下开始:

sudo dockerd &

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

虽然这是一个快速的临时解决方案,但我发现它会导致网络问题,所以我不推荐它,而是更喜欢使用轻型 VM


1.open windows docker desktop --> Setting --> General --> Disable Expose daemon on tcp://localhost:2375 without TLS

img1

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

img2

3.点击应用并重启

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

img3

今天刚试成功

祝你好运


我发现我的问题是由于误读说明造成的,在我的 Windows 版本 1909 和 WSL 2 上已修复,在 CMD 上使用以下命令:

wsl.exe -l -v
wsl.exe --set-version ${distro-name} ${wsl version}

例子:

C:\Users\xxxxx>wsl.exe -l -v
  NAME                   STATE           VERSION
* Ubuntu-18.04           Running         1
  docker-desktop-data    Running         2
  docker-desktop         Running         2

C:\Users\xxxxx>wsl.exe --set-version Ubuntu-18.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

就是这样


问题:无法连接到位于 tcp://127.0.0.1:2375 的 Docker 守护程序

电源外壳

wsl -l -v   # ALL DISPLAY "2"

Linux

unset DOCKER_HOST

/etc/init.d/docker restart

重启 Docker

windows docker restart
windows firewall off

Linux docker 进程

docker ps

我遇到了同样的问题,我的解决方案是将我的 Ubuntu 设置为默认的 wsl 发行版:wsl --set-default Ubuntu

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部