Windows 上的 WSL-Ubuntu-20.04 出现问题:“无法连接到 Docker 守护程序”和“系统尚未使用 systemd 作为 init 系统 (PID 1) 启动。”

Windows 上的 WSL-Ubuntu-20.04 出现问题:“无法连接到 Docker 守护程序”和“系统尚未使用 systemd 作为 init 系统 (PID 1) 启动。”

我在 Windows 上使用 WSL。我从 Microsoft Store 下载了 Ubuntu 20.04。运行后,我运行了以下命令:

sudo apt update
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7EA0A9C3F273FCD8
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo systemctl start docker
sudo docker run hello-world

很遗憾:

$ sudo systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

和:

$ sudo docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

我需要做什么才能让 Docker 在 WSL 上运行?我的同事使用了相同的命令,一切都对他有用

答案1

这里至少有三种可能的解决方案:

  • 首先,正如@ArturMeinild 在投票/评论中提到的,这里的核心问题是sudo systemctl start docker假设你正在运行Systemd。默认情况下,在Ubuntu 20.04和22.04中,Systemd未在WSL上启用。我相信这应该会在24.04中改变,但我通常仍然建议在没有Systemd的情况下运行(正如我的回答回答@ArturMeinild 链接的问题)。

    您的同事可能已启用 Systemd。

  • 其次,运行 Docker 非常容易没有Systemd 使用sudo service docker start。请参阅这个 Stack Overflow 上的答案以及解释和细节。

  • 最后,正如上一个链接答案中提到的,我个人建议使用 Docker Desktop,而不是开源 Docker Engine。我与 Docker 没有任何关系,但我相信许多使用 Docker Desktop 的充分理由,即使它需要您的公司获得许可证:

    • 它会自动处理 WSL 中的启动,并从一开始就防止您遇到此问题。仅凭这一点,您的雇主就肯定会节省比许可证成本更多的钱(在您排除故障的时间里)。

    • 通过购买许可证来支持 Docker(如果需要)也是一项很好的业务,因为它有助于资助开发。

    • 有一个很多Docker Desktop 中的增值功能可能会提高您的整体工作效率。请参阅我的Stack Overflow 答案查看 Docker Desktop 提供而 Docker Engine 不提供的功能的列表。

答案2

除了 NotTheDr01ds 的 (优秀) 答案之外,您还可以直接运行 Docker 守护程序。该命令dockerd会执行此操作,因此您可以sudo dockerd在另一个 WSL 窗口/选项卡中运行

tmux是另一种可行的方法。如果您不介意将所有 dockerd 输出发送到一个文件(您可能需要检查以确保它有效),您可以这样做:

$ sudo dockerd > ~/dockerd-log.txt 2>&1 &
[1] (the PID of dockerd)

$ sudo docker run hello-world
...

如果您愿意丢弃输出,您可能也可以用其他方法替代~/dockerd-log.txt/dev/null

相关内容