
image-20220314143716315
昨天在一臺(tái)新的 Windows 11 中安裝了 WLS2,目的就是使用 docker。
Microsoft Store 中默認(rèn)的 Debian 版本是 11,我在很久之前安裝的是 10,照著之前的經(jīng)驗(yàn)添加了北外鏡像的 docker-ce 源,安裝很順利。
使用過(guò) WSL2 的人肯定知道,WSL2 中不能使用systemctl,需要使用service來(lái)啟動(dòng) docker 或其他服務(wù)。
于是我便啟動(dòng) docker:
sudo service docker start
此時(shí)竟無(wú)法啟動(dòng),查看日志:
$ 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?)
可以看到是 iptables 的問(wèn)題,此問(wèn)題在其 github 倉(cāng)庫(kù)中有人提出過(guò)#1105,幸運(yùn)的是,這個(gè)問(wèn)題正好能被簡(jiǎn)單地解決。
首先,將iptables用iptables-legacy替換:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
然后,開(kāi)啟 ipv4 的包轉(zhuǎn)發(fā)功能:
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
最后,重啟 WSL2,下面的代碼在管理員模式下的 powershell 中運(yùn)行:
wsl --shutdown
此時(shí)再啟動(dòng) Debian,就能順利啟動(dòng) docker了。