You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:52:59