• WSL Docker : Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?


    在使用 WSL 的 ubuntu-20.04 linux 子系统初学安装和使用 docker 时遇到了这个问题

    我之前从 Microsoft Store 中下载了 ubuntu-20.04 的子系统尝鲜。

    在后期学习 docker 的时候,想把 docker 安装到 linux 子系统里。

    于是使用“菜鸟安装”的方式,把 docker 安装到了 WSL 的 linux 里面,即使用了命令:

    $ apt-get update
    $ wget -qO- https://get.docker.com/ | sh

    安装完成后使用命令检查,就出现了问题

    $ docker version
    Client: Docker Engine - Community
     Version:           20.10.6
     API version:       1.41
     Go version:        go1.13.15
     Git commit:        370c289
     Built:             Fri Apr  9 22:47:17 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    
    $ _

    提示以上错误信息,发现 docker 服务根本起不来,只有客户端是活着的。

    去找了很多答案都和我的问题不符,也没法解决。关键点在于我使用了 WSL 的 linux 子系统,情况可能比较特殊。

    之后,先是找到了 windows 10 对于 WSL 的官方文档指导 文档 。

    在疑难解答的位置被指引到了另外一篇文章: windows 10 上的如何在适用于 Linux (WSL2)的 Windows 系统中设置 Docker 。

    这篇文章作者对比说明了 WSL1 和 WSL2 的一些问题(其实是着重推荐了一波 WSL2)。

    在翻阅文章的过程中,又被导引到了 Docker 官方文档对于 WSL2 的操作说明 Docker Desktop WSL2

    官方文档中说明 docker 目前对 WSL2 的支持已经非常完备了,并且强烈推荐使用 WSL2 来配合 docker 使用,这也是官方推荐的最佳方式。

    这时我就想到是不是因为使用“菜鸟安装”脚本的最新版本 docker 和我的 WSL 版本不匹配造成的。因为我尝鲜 WSL 子系统比较早,那时候可能用的还不是 WSL2 。

    于是我根据安装指南中的操作,对 WSL 执行检查:

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

    结果发现我的 ubuntu20.04 是 WSL1 而不是 WSL2 ,是不是这个问题还不确定,但是我还是决定先升级 WSL2 试试看:

    C:> wsl.exe --set-version ubuntu-20.04 2
    正在进行转换,这可能需要几分钟时间...
    有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
    转换完成。

    升级过后在 Windows Terminal 中重新打开 ubuntu-20.04,再次运行 docker version 检查,发现仍然有问题。

    然后我重新启动 docker,并检查 docker 的运行状态,发现 docker 可以正常启动了,问题解决。

    总结:问题原因是 docker 版本和 WSL2 版本都太新,很多人应该还没有遇到这样的情况。如果你在 windows 10 1909 之前就尝鲜过 WSL,

    你安装的 linux 子系统一定是 WSL1 的,那么很有可能你也会遇到这个问题。不妨先用 wsl.exe -l -v 命令检查一下 WSL 的版本。

    WSL2 是在 1909 之后微软才推出的,所以需要把 WSL1 文件系统升级到 WSL2 即可解决问题。

    2021年4月15日00点15分 ——codingR

  • 相关阅读:
    【xamarin + MvvmCross 从零开始】一、环境安装
    .NET微服务从0到1:服务容错(Polly)
    .NET微服务从0到1:服务注册与发现(Consul)
    .NET微服务从0到1:API网关(Ocelot)
    .NET Core之单元测试(四):Fluent Assertions的使用
    .NET Core之单元测试(三):Mock框架Moq的使用
    .NET Core之单元测试(二):使用内存数据库处理单元测试中的数据库依赖
    .NET Core之单元测试(一):入门
    win+navicat
    JDBC介绍和Mybatis运行原理及事务处理
  • 原文地址:https://www.cnblogs.com/wxw310415/p/14660690.html
Copyright © 2020-2023  润新知