WSL2-Debian 安装 docker 后无法启动的解决办法
<p><img src="https://s1.ax1x.com/2022/03/14/bOY4p9.png" alt="image-20220314143716315" loading="lazy"></p><p>昨天在一台新的 Windows 11 中安装了 WLS2,目的就是使用 docker。</p>
<p>Microsoft Store 中默认的 Debian 版本是 11,我在很久之前安装的是 10,照着之前的经验添加了北外镜像的 docker-ce 源,安装很顺利。</p>
<p>使用过 WSL2 的人肯定知道,WSL2 中不能使用<code>systemctl</code>,需要使用<code>service</code>来启动 docker 或其他服务。</p>
<p>于是我便启动 docker:</p>
<pre><code class="language-bash">sudo service docker start
</code></pre>
<p>此时竟无法启动,查看日志:</p>
<pre><code class="language-bash">$ cat /var/log/docker.log
...
Sep 13 20:47:37 xxx dockerd: failed to start daemon: Error initializing network controller: error
obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N D
OCKER: iptables v1.4.21: can't initialize iptables table `nat': Table does not exist (do you need to ins
mod?)
</code></pre>
<p>可以看到是 iptables 的问题,此问题在其 github 仓库中有人提出过#1105,幸运的是,这个问题正好能被简单地解决。</p>
<p><strong>首先</strong>,将<code>iptables</code>用<code>iptables-legacy</code>替换:</p>
<pre><code class="language-bash">sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
</code></pre>
<p><strong>然后</strong>,开启 ipv4 的包转发功能:</p>
<pre><code class="language-bash">sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
</code></pre>
<p><strong>最后</strong>,重启 WSL2,下面的代码在管理员模式下的 powershell 中运行:</p>
<pre><code class="language-powershell">wsl --shutdown
</code></pre>
<p>此时再启动 Debian,就能顺利启动 docker了。</p><br><br>
来源:https://www.cnblogs.com/thepoy/p/16004037.html
頁:
[1]