没有 Docker Desktop 的 WSL 下的 Docker

xpt*_*xpt 1 docker windows-subsystem-for-linux wsl-2

这是关于从 WSL 中运行 Docker 而不使用 Docker Desktop 的问题。对于WSL2是可行的,因此这个问题的重点是专门针对WSL1。根据我的研究,

\n
    \n
  • 有人说 “Docker 守护进程不能直接在 WSL 上运行”,而
  • \n
  • 另一篇文章称,在 Docker 社区版 17.09.0 的帮助下, Docker 可以“在 Windows 子系统 Linux 中无缝运行”,因为“对 WSL 内核进行了重大更改,允许使用 Docker 管理系统所需的 cgroup” \xe2\x80\x99s 资源放入容器中。”
  • \n
\n

我的docker在debian bullseye下是20.10.5。还会好吗?

\n

我尝试了一下,得到了:

\n
iptables can\'t initialize iptables table `nat\': Table does not exist\n
Run Code Online (Sandbox Code Playgroud)\n

Iptables v1.6.1 can'tinitialize iptables table `filter' Ubuntu 18.04 Bash Windows的答案是,

\n
\n

根据 github.com 上的 Microsoft WSL 页面,不支持 iptables。

\n

https://github.com/Microsoft/WSL/issues/767

\n
\n

但这已经是 4 年多前的事了,而且在 2019 年晚些时候就有可能实现,我想知道最新的状态是什么。

\n

Not*_*1ds 6

WSL1 -可以的小引擎(包含链接,因为该参考文献可能只能被有限的受众理解)。

不幸的是,就 Docker 而言,WSL1 引擎似乎已经失去了动力。在阅读您引用的博客文章以及相应的Github 线程时,我对人们在运行 Docker 方面取得的进展感到非常惊讶。我以前从未见过这样的情况。

然而,如果您阅读了 Github 线程上的完整评论,就会发现结果相当有限。将这些摘录按顺序排列:

[ 2018-04-23 ] 我很高兴地说 Docker 守护进程终于在 WSL 上运行了。我正在构建 17134 上进行测试。...现在在构建 17134 上运行的最后一个 docker-ce 版本是 17.09.0。此后的任何操作都无法提取 docker 映像。

请注意,它必须(而且仍然必须)在以Windows管理员身份运行的 WSL1 实例中运行。

[ 2018-0612 ] 不幸的是,docker-compose仍然无法工作......存在一个问题iptables,WSL 尚未完全支持该问题。

(你遇到过,虽然我没有看到。也许是“管理”的事情?)

[ 2018-07-09 ] 是的,我最近在 Twitter 上提到了这一点,并从我们的前 WSL PM 那里得到了一条“我们不支持这一点,我们强烈建议反对它”的重要信息。

[ 2018-11-13 ] WSL PM 这里。正如上面评论中提到的,我们在 WSL 的最新版本中改进了 Docker 支持。大多数(如果不是全部)版本的 docker-ce 都可以与 WSL 配合使用。目前,我们正在对 WSL 进行大量更改。作为这些更改的一部分,我们正在考虑在 WSL 中添加本机 Docker 支持。当我有其他更新要分享时,我将添加到此线程以及有关 Docker 支持的其他问题

这似乎并没有取得任何进展,因为至少 PM 从未在线程中再次发帖。

[ 2019-04-18 ] 就像其他人指出的那样,运行 docker 17.09 可以工作。以后的任何事情都会因不同的错误而失败。较新的 docker 版本可能正在使用 WSL 尚未实现的其他系统调用。

这里还散布着一些关于使用--network host(对于客户端)或--iptables=false(对于守护进程)运行的其他消息。

[ 2019-08-04 ] 通过 WSL2 进行 Windows Insider Fast Ring 构建 (>=18917),最新的 docker/docker-compose 在 WSL Linux 中本机运行。

2020 年底,这条线索消失了。

在测试 WSL1 Ubuntu 20.04 实例中,我能够hello-world运行,但仅此而已。运行busyboxubuntu图像(带或不带交互式终端)失败,并显示:

Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: waiting for init preliminary setup: EOF: unknown.

一旦焦点转移到 WSL2 和真正的内核,在我看来,WSL 团队在推进 WSL1 的伪内核系统调用转换层方面并没有取得任何更多进展。

  • 再次非常感谢您如此高质量的回答! (2认同)