保姆级教程:在WSL2的Ubuntu 20.04上从安装到完美运行Docker(避坑指南全覆盖)
WSL2 Ubuntu 20.04 Docker全流程配置指南:从安装到生产级优化
在开发者的日常工作中,Docker已经成为不可或缺的工具。而Windows用户通过WSL2运行Ubuntu 20.04来使用Docker,既能享受Linux环境的便利,又能保持Windows系统的友好界面。本文将带你从零开始,在WSL2的Ubuntu 20.04上完成Docker的完整配置流程,包括环境准备、安装选择、常见问题预防和后期优化,确保你获得与原生Linux几乎无差别的Docker使用体验。
1. 环境准备与系统配置
在开始安装Docker之前,确保你的WSL2和Ubuntu 20.04环境已经正确设置并更新到最新状态。这一步至关重要,可以避免后续许多潜在问题。
首先,确认你的Windows系统已经启用WSL2功能。在PowerShell中运行:
wsl --list --verbose
输出应显示你的Ubuntu 20.04发行版,并且VERSION列为2。如果不是,你需要先升级到WSL2:
wsl --set-version Ubuntu-20.04 2
接下来,在Ubuntu 20.04中更新系统包:
sudo apt update && sudo apt upgrade -y
系统更新完成后,安装一些基础依赖包:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
这些包将为后续Docker安装提供必要的支持。特别需要注意的是,WSL2与完整Linux系统在服务管理上有一些差异,这会影响Docker的运行方式。
提示:WSL2的内存管理有时会导致系统资源不足。如果遇到性能问题,可以在Windows用户目录下的
.wslconfig文件中添加以下内容来调整资源分配:[wsl2] memory=4GB processors=2
2. Docker安装方案选择与实施
在WSL2的Ubuntu 20.04上安装Docker有多种方法,每种方法各有优缺点。我们将详细比较这些方法,并推荐最适合WSL2环境的安装流程。
2.1 官方仓库安装(推荐)
这是最常用且维护最方便的安装方式:
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
这种方法的优势在于:
- 自动获取最新稳定版本
- 便于后续更新维护
- 官方支持保障
2.2 离线包安装(特殊场景备用)
在某些无法连接互联网的环境中,可以使用离线包安装方式:
-
从另一台机器下载所需deb包:
wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce_20.10.12~3-0~ubuntu-focal_amd64.deb wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/docker-ce-cli_20.10.12~3-0~ubuntu-focal_amd64.deb wget https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/containerd.io_1.4.12-1_amd64.deb -
将包复制到目标机器后安装:
sudo dpkg -i docker-ce*.deb containerd.io*.deb
离线安装的缺点是版本固定,后续更新麻烦,仅推荐在特殊网络环境下使用。
2.3 安装后必须的iptables配置
无论采用哪种安装方式,在WSL2中安装Docker后必须立即执行以下操作,这是预防"无法连接Docker守护进程"问题的关键:
sudo update-alternatives --config iptables
在出现的菜单中选择
1
(iptables-legacy),然后重启Docker服务:
sudo service docker restart
如果遇到
no alternatives for iptables
错误,先修复系统包:
sudo apt --fix-broken install
注意:这一步不是可选的,而是WSL2环境下Docker正常工作的必要条件。许多教程将其作为问题解决方案,但实际上应该作为安装流程的标准步骤。
3. 安装验证与基础配置
安装完成后,我们需要验证Docker是否正常工作,并进行一些基础配置以提升使用体验。
3.1 基本功能验证
运行经典的hello-world容器来测试Docker基本功能:
sudo docker run hello-world
如果看到欢迎信息,说明Docker已正确安装。接下来测试更复杂的功能:
# 运行一个交互式Ubuntu容器
sudo docker run -it ubuntu bash
# 在容器内执行简单命令
ls -l
exit
3.2 用户组配置(避免频繁使用sudo)
默认情况下,运行Docker命令需要sudo权限。将当前用户加入docker组可以避免每次都要输入sudo:
sudo usermod -aG docker $USER
然后退出终端重新登录使更改生效。验证是否生效:
docker run hello-world
如果仍然需要sudo,可能需要重启WSL实例:
wsl --terminate Ubuntu-20.04
3.3 服务自启动配置
由于WSL2的特殊性,Docker服务不会自动启动。我们有几种解决方案:
方案1:每次启动时手动运行(最简单)
sudo service docker start
方案2:添加到shell配置文件(推荐)
在
~/.bashrc
或
~/.zshrc
末尾添加:
# 启动Docker服务
if [ -z "$(ps aux | grep dockerd | grep -v grep)" ]; then
sudo service docker start >/dev/null 2>&1
fi
方案3:Windows任务计划(最自动化)
-
创建
start_docker.sh脚本:#!/bin/bash sudo service docker start - 在Windows任务计划中设置登录时运行该脚本
4. 高级配置与性能优化
为了让Docker在WSL2中发挥最佳性能,我们需要进行一些高级配置。
4.1 存储驱动优化
WSL2默认的Docker存储驱动可能不是最优选择。检查当前存储驱动:
docker info | grep "Storage Driver"
如果显示
overlay2
,则已经是最佳配置。如果是其他驱动,可以修改配置:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"storage-driver": "overlay2"
}
EOF
sudo service docker restart
4.2 镜像与数据存储位置
WSL2的磁盘性能受虚拟化影响,将Docker数据存储在WSL2发行版内部通常比挂载Windows目录更快:
docker info | grep "Docker Root Dir"
确保输出路径以
/var/lib/docker
开头,表示数据存储在WSL2内部。
4.3 资源限制调整
默认情况下,Docker可以使用WSL2分配的所有资源。如果需要限制,可以创建或修改
/etc/docker/daemon.json
:
{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65535,
"Soft": 65535
}
},
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启Docker使更改生效:
sudo service docker restart
4.4 网络性能优化
WSL2的网络性能有时会成为瓶颈。可以尝试以下优化:
-
禁用IPv6(如果不需要):
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1 -
调整TCP缓冲区大小:
sudo sysctl -w net.core.rmem_max=4194304 sudo sysctl -w net.core.wmem_max=4194304
这些优化可以显著提升容器网络性能,特别是在大量数据传输场景下。
5. 常见问题排查与解决
即使按照最佳实践配置,仍可能遇到一些问题。以下是WSL2中Docker常见问题的解决方法。
5.1 Docker服务无法启动
如果遇到
Cannot connect to the Docker daemon
错误,按以下步骤排查:
-
确认Docker服务正在运行:
sudo service docker status -
如果没有运行,尝试启动:
sudo service docker start -
检查日志获取详细信息:
journalctl -u docker.service -b
5.2 容器网络连接问题
WSL2的NAT网络可能导致容器网络异常。解决方法:
-
重置Docker网络:
sudo systemctl reset-failed docker.service sudo systemctl restart docker -
检查防火墙设置:
Get-NetFirewallProfile | Select-Object Name, Enabled必要时在Windows防火墙中添加例外规则。
5.3 磁盘空间不足
WSL2虚拟硬盘空间会不断增长但不会自动回收。手动清理:
-
在Windows中列出WSL发行版:
wsl --list --verbose -
导出重要数据后关闭发行版:
wsl --terminate Ubuntu-20.04 -
压缩虚拟硬盘:
diskpart select vdisk file="%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx" compact vdisk exit
5.4 性能监控与调优
监控WSL2中Docker的资源使用情况:
# 查看容器资源使用
docker stats
# 查看系统资源
top
htop
如果发现性能问题,可以调整WSL2资源配置。创建或修改
%USERPROFILE%\.wslconfig
:
[wsl2]
memory=6GB
processors=4
swap=2GB
这些配置需要重启WSL2生效:
wsl --shutdown
更多推荐


所有评论(0)