WSL2里手动安装Docker 遇坑
在 WSL2 里手动安装 Docker Engine 时遇坑:systemctl 和 service 命令在默认的 WSL2 Ubuntu 中 无法使用,因为 WSL2 没有 systemd。怎么办?
自己操作让 Docker Engine(dockerd)直接跑起来,挂到/var/run/docker.sock
,而不是依赖systemctl
!
🛠️ 目标
在 WSL2 Ubuntu 20.04 中:
- 自己起
dockerd
; - 生成
/var/run/docker.sock
; - 直接能用
docker
命令连接。
🧩 操作步骤
第一步:确认你已经安装好 docker-ce
如果没装的话,先按官方步骤或者快速装好:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
第二步:启动 dockerd
手动服务(重点)
直接在 WSL2 里执行:
sudo dockerd --host unix:///var/run/docker.sock
解释一下:
dockerd
是 Docker daemon,就是服务端;--host unix:///var/run/docker.sock
表示:- 监听一个 UNIX Socket(本地文件)作为通信接口;
- 这个 socket 文件就是
/var/run/docker.sock
。
如果成功,会看到类似日志:
INFO[2024-04-27T14:00:00.000000000Z] API listen on /var/run/docker.sock
然后你就可以开一个新终端,测试:
docker ps
成功!
第三步(可选):后台运行 dockerd
手动运行是前台阻塞的,如果你想后台运行:
方案1:加上 &
sudo dockerd --host unix:///var/run/docker.sock &
方案2:用 nohup
保持挂后台
nohup sudo dockerd --host unix:///var/run/docker.sock > /tmp/dockerd.log 2>&1 &
这样即使关闭终端也不掉。
第四步(进阶):自动启动(方便每次开 WSL)
如果你懒得每次手动启动,可以在 ~/.bashrc
或 ~/.profile
最后加上:
# 启动 Docker Daemon
if [ ! -S /var/run/docker.sock ]; thensudo nohup dockerd --host unix:///var/run/docker.sock > /tmp/dockerd.log 2>&1 &
fi
这样每次打开 WSL,都会自动检查 /var/run/docker.sock
是否存在,不存在就自己拉起来。
🎯 注意事项
dockerd
必须用 sudo,因为它要创建系统级 socket;- 启动后要保证
/var/run/docker.sock
是 root:docker 权限; - 你的用户如果想免 sudo 用 docker,可以把自己加到
docker
组里:
sudo usermod -aG docker $(whoami)
newgrp docker
然后就可以直接:
docker ps
不需要 sudo。
✅ 小结
步骤 | 说明 |
---|---|
安装好 docker | sudo apt install docker-ce |
手动起 dockerd | sudo dockerd --host unix:///var/run/docker.sock |
新终端用 docker | docker ps |
后台起 / 自动起 | nohup 或 .bashrc |