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