在Windows的Ubuntu WSL上安装Docker遇到问题

3
我正在为Windows的Ubuntu WSL安装Docker,但遇到了麻烦。这是安装指南:https://docs.docker.com/engine/install/ubuntu/ 当我尝试运行末尾的命令(sudo docker run hello-world)时,我遇到的具体错误是:docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock.
我按照所有步骤操作,直到最后没有出现任何错误并得到了该错误提示,但我认为第2步没有正确执行。这个命令应该输出什么吗?
echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
如果应该输出内容,那它应该输出什么?我问这个问题是因为我看到了echo命令。还是这只是将输出传输到第二个命令?在这个安装过程中,如何最好地查看哪些步骤成功或失败?我不够熟悉,无法确定出错原因。

你可能需要从 https://docs.docker.com/docker-for-windows/wsl/ 安装。 - Philippe
1个回答

3
您正在直接在Ubuntu WSL上安装Docker Engine,这很好,但我想确保您了解还有另一种选择。"推荐"方法是安装Windows的Docker桌面版
Docker桌面版相对于基本的Docker引擎提供了一些额外的功能:
  • 它可以在多个WSL2实例之间共享
  • 它可以从PowerShell和CMD运行
  • 它提供容器和卷的GUI仪表板
  • 它处理自动升级(尽管有些人可能不认为这是一个优点)
  • 它是一种方便的方法,可以自动处理下面所有其他东西。
两个版本都在同样的引擎下运行,但桌面版提供了额外的便利功能。如果您不需要或不想要这些功能,并且您真的只想安装Docker Engine,那么解决当前问题的方法应该是直接运行:
sudo service docker start

那么请再尝试一次样例。WSL 中需要进行额外步骤,而 Docker 文档没有提及。

(附加技巧) 我建议通过以下方式运行 hello-world:

sudo docker run --rm hello-world

在我看来,退出后没有理由让特定的容器仍然存在。我希望Docker能够更新这些文档。

此外,假设一切正常,我建议通过以下方式摆脱该镜像:

sudo docker rmi hello-world

说明:

在“普通”的Ubuntu上,docker-ce软件包执行的安装过程之一是启动Docker守护进程。但是,由于WSL工作方式的差异(缺乏运行级别、systemd、启动脚本支持等),该步骤会失败。

因此,在当前的第3步中通过docker run ...验证守护进程是否在运行时,它实际上并没有运行。

当您到达“Linux的后安装步骤:配置Docker在启动时自动启动”部分时,您也会遇到类似的问题*

这在WSL上不起作用,因为没有“启动”概念(而且再次没有Systemd)。因此,您需要一种替代方法来确保引擎在WSL中运行。当您需要时,可以使用手动的sudo service docker start。或者,如果您愿意,可以将以下内容添加到您的~/.bashrc中:

wsl.exe -u root -e sh -c "service docker status || service docker start"

还有其他方法,但这只是一个例子。

至于在添加存储库密钥时缺少任何输出,这是预期的,因为输出(Stdout)被管道传输到/dev/null。如果有错误,可能仍然会在Stderr上报告。


搞定了!所以我还需要配置Docker桌面,因为它已经在今年早些时候安装过了。基本上,我需要按照这个指南将Ubuntu更新到WSL 2:https://learn.microsoft.com/en-us/windows/wsl/install-win10 。然后像这里一样将Docker与发行版集成:https://dev59.com/1FIH5IYBdhLWcg3wKJ9U#64941038 然后我按照你的步骤进行操作。 - simplycoding
然而,当我尝试停止 hello-world 时,出现了以下错误:Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container be74db2e9bba is using its referenced image d1165f221234 - simplycoding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接