wsl_docker
WSL2 中安装配置 Docker 环境
补充说明
该教程提供在 WSL2 Linux 子系统中安装 Docker 引擎的完整方案,替代 Docker Desktop 在 Windows 上的使用。直接在 WSL2 中运行 Docker Engine 比 Docker Desktop 资源占用更低,且与 Linux 原生 Docker 环境完全一致,适合开发、测试和生产部署场景。
功能特点
- 原生 Docker:在 WSL2 中安装 Docker Engine,与 Linux 环境完全一致
- 资源占用低:无需 Docker Desktop,节省系统资源
- systemd 支持:配合 systemd 管理 Docker 服务
- 便捷管理:支持 dockerd 前台启动和后台服务两种模式
- Docker Compose:集成 Docker Compose 插件
主要章节
| 章节 | 内容 |
|---|---|
| 前置准备 | 启用 systemd、更新系统 |
| 安装 Docker | 使用官方脚本安装 Docker Engine |
| 启动 Docker | systemd / 手动启动两种方式 |
| 免 sudo 执行 | 将用户添加到 docker 组 |
| 安装 Compose | Docker Compose 插件安装 |
| 配置加速 | 镜像加速器配置 |
| 资源限制 | 限制 Docker 使用的内存和 CPU |
注意事项
- 建议先启用 WSL2 systemd 支持(参考 wsl_systemd)
- Docker 运行在 WSL2 内,不受 Docker Desktop 许可证限制
- 如需使用 Docker Desktop 的 Windows 容器功能,请参考 win-install-docker
- WSL2 内存占用可通过 .wslconfig 限制
前置准备
启用 systemd
Docker 服务依赖 systemd 管理,参考 wsl_systemd 启用:
sudo nano /etc/wsl.conf
添加:
[boot]
systemd=true
重启 WSL:
wsl --shutdown
wsl
更新系统
# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y
# Kali
sudo apt update && sudo apt full-upgrade -y
# Alpine
apk update && apk upgrade
安装依赖
# Ubuntu / Debian
sudo apt install -y ca-certificates curl gnupg lsb-release
# Alpine
apk add ca-certificates curl gnupg
安装 Docker Engine
使用官方安装脚本(推荐)
# 下载并运行 Docker 安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Ubuntu / Debian 手动安装
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
# 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Alpine 安装
# Alpine 使用 apk 安装 Docker
apk add docker docker-cli-compose openrc
# 安装 Docker 服务脚本
rc-update add docker boot
启动 Docker
方法一:systemd 启动(推荐)
如果已启用 systemd:
# 启动 Docker
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 查看状态
sudo systemctl status docker
方法二:手动启动 dockerd
如果未启用 systemd:
# 后台启动(保持运行)
sudo dockerd &
# 或使用 nohup
nohup sudo dockerd > /dev/null 2>&1 &
# 验证
docker info
方法三:Windows 开机自启 WSL + Docker
在 Windows 中创建计划任务或脚本:
# 创建启动脚本 start_wsl_docker.ps1
wsl -d ubuntu -u root bash -c "service docker start"
免 sudo 执行 Docker
# 创建 docker 组(如不存在)
sudo groupadd docker
# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER
# 使权限生效
newgrp docker
# 验证(无需 sudo)
docker run hello-world
安装 Docker Compose
Docker Compose 已作为 Docker 插件随 Docker CE 安装:
# 验证
docker compose version
# 使用示例
docker compose up -d
如需独立的 docker-compose 二进制:
# 下载最新版
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --version
配置镜像加速器
配置 Docker 镜像加速
# 创建配置文件
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
添加以下内容(以阿里云为例):
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
重启 Docker:
sudo systemctl restart docker
# 验证加速器生效
docker info | grep -A 3 "Registry Mirrors"
资源限制
限制 Docker 内存和 CPU
通过 .wslconfig 限制 WSL2 整体资源,间接限制 Docker:
在 PowerShell 中编辑:
notepad "$env:USERPROFILE\.wslconfig"
[wsl2]
memory=4GB
processors=2
localhostForwarding=true
重启 WSL:
wsl --shutdown
wsl
限制单个容器资源
# 限制内存和 CPU
docker run -d --name myapp \
--memory="512m" \
--cpus="0.5" \
nginx
# 更新已运行容器的限制
docker update --memory="1g" --cpus="1" myapp
Docker 常用命令
| 命令 | 说明 |
|---|---|
docker ps |
列出运行中的容器 |
docker ps -a |
列出所有容器 |
docker images |
列出本地镜像 |
docker pull <image> |
拉取镜像 |
docker run -d <image> |
后台运行容器 |
docker stop <container> |
停止容器 |
docker rm <container> |
删除容器 |
docker rmi <image> |
删除镜像 |
docker logs -f <container> |
查看容器日志 |
docker exec -it <container> bash |
进入容器 |
Compose 项目部署
将 Compose 文件放在 WSL2 中的目录:
# 创建项目目录
mkdir ~/docker-projects && cd ~/docker-projects
# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
nginx:
image: nginx:alpine
ports:
- "8080:80"
EOF
# 启动
docker compose up -d
# 访问 http://localhost:8080
常见问题
Docker 无法启动
# 检查 Docker 服务状态
sudo systemctl status docker
# 查看日志
sudo journalctl -u docker --no-pager -n 50
# 手动启动 dockerd 查看错误
sudo dockerd
权限不足
# 如果遇到 permission denied
sudo usermod -aG docker $USER
# 然后退出重新登录 WSL
WSL 重启后 Docker 未启动
# 每次登录自动启动 Docker
echo 'sudo service docker start' >> ~/.bashrc
# 或使用 systemd(推荐)
sudo systemctl enable docker
端口冲突
如果 Windows 上的端口已被占用,修改 docker-compose 中的映射端口:
ports:
- "8081:80" # 将宿主机 8081 映射到容器 80
磁盘空间清理
# 清理未使用的容器、镜像、网络
docker system prune -af
# 查看磁盘占用
docker system df
验证安装
# Docker 版本
docker --version
docker compose version
# 运行测试容器
docker run --rm hello-world
# 运行 Nginx 测试
docker run -d -p 8080:80 --name test-nginx nginx:alpine
curl localhost:8080
docker stop test-nginx && docker rm test-nginx
# Docker 信息
docker info
参考链接
相关命令
- wsl
- wsl_docker 👈 当前所在位置
- wsl_systemd
- wsl_proxy