WSL-Ubuntu 20.04中Docker无法启动问题:无法连接Docker守护进程及systemd初始化系统报错
WSL-Ubuntu 20.04中Docker无法启动问题:无法连接Docker守护进程及systemd初始化系统报错
兄弟,我太懂你踩的这个坑了!你遇到的两个报错其实是连锁反应:WSL默认压根就没把systemd当初始化系统(PID1用的是init),所以systemctl命令自然没法正常工作;而Docker守护进程没启动起来,docker run肯定会连不上套接字。给你两个靠谱的解决方向,都是我自己踩过坑验证过的:
先讲个临时应急的快速启动方法
要是你现在就想跑Docker试试,不用改任何配置:
- 打开终端直接手动启动Docker守护进程:
sudo dockerd,不过这个会占着当前终端窗口,想后台跑就加个&:sudo dockerd & - 然后新开一个终端窗口,再跑
sudo docker run hello-world,这时候应该就能正常拉取镜像运行了。
永久解决的两个方案(选一个就行)
方案一:不用systemd,让WSL自动启动dockerd
这个方案不用动WSL的核心初始化配置,适合不想折腾的情况:
- 编辑你当前用户的shell配置文件,比如用bash的话就编辑
~/.bashrc,用zsh就编辑~/.zshrc,在文件末尾加上这段脚本:# 自动后台启动dockerd if ! pgrep -x "dockerd" > /dev/null; then sudo dockerd > /dev/null 2>&1 & disown fi - 保存后运行
source ~/.bashrc(对应你的rc文件),下次打开WSL终端时,dockerd会自动在后台启动,不用你手动管了。
方案二:启用WSL的systemd支持(推荐,和原生Ubuntu体验一致)
要是你习惯用systemctl管理服务,想和你同事一样用原来的命令操作,那就启用WSL的systemd:
- 先确认你的WSL版本在0.67.6以上,运行
wsl --version就能看版本号,要是版本低,直接去Windows的微软商店更新WSL就行。 - 在Ubuntu里编辑
/etc/wsl.conf文件,添加以下内容:[boot] systemd=true - 保存后,去Windows的命令提示符或者PowerShell里运行
wsl --shutdown,彻底关闭WSL实例,然后重新打开Ubuntu终端。 - 现在你可以用
systemctl list-units --type=service确认systemd已经在运行了,然后就可以用你原来的命令操作Docker了:sudo systemctl start docker sudo systemctl enable docker # 设置Docker随WSL启动自启 sudo docker run hello-world - 这样以后你再打开WSL,Docker就会自动启动,和你同事的操作流程完全一致了。
至于为什么你同事用同样的命令能成?大概率是他的WSL已经提前启用了systemd,或者他用的是新版本WSL默认开启了这个功能,没告诉你而已😉
备注:内容来源于stack exchange,提问作者Cierniostwor
相关产品推荐
相关产品推荐

