Windows WSL虽然支持通过命令行直接运行Linux系统发行版,但WSL并不支持Systemd,导致Linux系统的Docker无法以后台服务的形式启动。通常的解决办法为安装Docker Desktop,再设置WSL为后端来在Linux下运行Docker,这种方式还是不太方便。
Distrod提供一种更简单的方案,通过安装Distrod或者使用预置Distrod的Linux发行版,解决在WSL下运行Docker的问题。
这里我选择在Ubuntu 18.04上安装Distrod的方式来运行Docker,毕竟我已经安装了Ubuntu的发行版。
安装Distrod
- 通过Windows Terminal打开Ubuntu,并安装Distrod,执行以下命令:
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
- 在Ubuntu上使能
Distrod
,执行/opt/distrod/bin/distrod enable
或者可以一劳永逸选择在Windows启动/opt/distrod/bin/distrod enable --start-on-windows-boot
。
开打新的Windows终端窗口,如Power Shell或者CMD,执行
wsl --terminate Ubuntu-18.04
(通过wsl --list
可以获取所有的WSL发行版)。打开新的Ubuntu 窗口,执行
sudo service docker start
或者sudo systemctl enable docker.service && sudo systemctl start docker.service
启动Docker服务。
运行Docker
简单运行一个nginx的镜像:
iambowen@LAPTOP-ESJAVHR4:~$ docker run -d -p 8080:80 nginx:alpine
Unable to find image 'nginx:alpine' locally
alpine: Pulling from library/nginx
df9b9388f04a: Pull complete
5867cba5fcbd: Pull complete
4b639e65cb3b: Pull complete
061ed9e2b976: Pull complete
bc19f3e8eeb1: Pull complete
4071be97c256: Pull complete
Digest: sha256:5a0df7fb7c8c03e4158ae9974bfbd6a15da2bdfdeded4fb694367ec812325d31
Status: Downloaded newer image for nginx:alpine
4dbd96be91aa8e836027fb94318992a9ee2e88945e7b5e0241c05ab8007517e3
iambowen@LAPTOP-ESJAVHR4:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dbd96be91aa nginx:alpine "/docker-entrypoint.…" 4 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp friendly_pasteur
在Windows的浏览器中输入127.0.0.1:8080
就可以看到Nginx欢迎界面了。