保姆级教程:在WSL2的Ubuntu 20.04上从安装到跑通Docker的完整避坑指南
WSL2 Ubuntu 20.04 Docker全流程配置指南:从安装到稳定运行
在开发者的日常工作中,Docker已经成为不可或缺的工具。而Windows用户通过WSL2运行Ubuntu并配置Docker,则是一种兼顾Windows便利性和Linux开发环境的理想方案。本文将带你从零开始,在WSL2的Ubuntu 20.04环境中完整配置Docker,并解决你可能遇到的各种问题。
1. 环境准备与安装方式选择
在开始之前,确保你的系统满足以下基本要求:
- Windows 10版本2004或更高(建议使用Windows 11)
- 已启用WSL2功能
- 已安装Ubuntu 20.04发行版
安装方式对比 :
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 在线安装 | 简单快捷,自动获取最新版本 | 需要稳定网络连接 | 常规开发环境 |
| 离线安装 | 不依赖网络,版本可控 | 需要手动下载包,更新麻烦 | 内网环境或无网络情况 |
| 脚本安装 | 全自动化,包含必要配置 | 需要信任第三方脚本 | 快速测试环境 |
对于大多数开发者,我们推荐使用在线安装方式:
# 更新软件包索引
sudo apt update
# 安装必要依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker仓库
echo "deb [arch=amd64 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. 安装后基础验证
安装完成后,我们需要验证Docker是否正确安装并能正常运行:
# 检查Docker服务状态
sudo systemctl status docker
# 运行测试容器
sudo docker run hello-world
如果一切正常,你应该能看到"Hello from Docker!"的欢迎信息。如果没有,可能是以下原因:
-
Docker服务未启动:
sudo service docker start - 权限问题:当前用户不在docker组
- WSL2特有的网络或防火墙问题
3. 解决守护进程连接问题
在WSL2环境中,最常见的Docker问题是"Cannot connect to the Docker daemon"错误。这通常与iptables配置有关:
# 检查当前iptables版本
sudo update-alternatives --config iptables
你会看到类似输出:
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode
选择选项1切换到iptables-legacy模式,然后重启Docker服务:
sudo service docker restart
如果遇到"no alternatives for iptables"错误,先修复包依赖:
sudo apt --fix-broken install
sudo apt install iptables
4. 用户权限与系统配置
为了避免每次使用Docker都需要sudo,将当前用户加入docker组:
sudo usermod -aG docker $USER
注意:修改组设置后需要完全退出并重新登录WSL会话才能生效
常见权限问题解决方案 :
-
检查用户是否在docker组:
groups -
如果仍然遇到权限问题,尝试:
sudo chmod 666 /var/run/docker.sock -
对于持久化权限问题,可以创建别名:
echo "alias docker='sudo docker'" >> ~/.bashrc source ~/.bashrc
5. WSL2与Windows防火墙交互
WSL2的网络架构可能导致Docker与Windows防火墙冲突。以下是解决方案:
方法一:允许Docker通过防火墙
- 打开Windows Defender防火墙
- 选择"允许应用或功能通过Windows Defender防火墙"
- 找到"Docker Desktop"并确保所有网络类型都被勾选
方法二:禁用WSL2的虚拟网络过滤 在Windows PowerShell中运行:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters" -Name "AllowFiltersOnVirtualInterfaces" -Value 1 -PropertyType DWORD -Force
然后重启计算机。
6. 高级配置与优化
为了让Docker在WSL2中运行得更高效,可以进行以下优化:
内存与CPU限制
:
在
%USERPROFILE%\.wslconfig
文件中添加:
[wsl2]
memory=4GB
processors=2
Docker数据目录迁移 : 默认情况下,Docker数据存储在WSL2虚拟硬盘中,可以迁移到Windows分区:
# 停止Docker服务
sudo service docker stop
# 创建新的存储目录
sudo mkdir /mnt/wsl/docker-data
# 修改Docker配置
sudo sed -i 's|"data-root": "/var/lib/docker"|"data-root": "/mnt/wsl/docker-data"|' /etc/docker/daemon.json
# 启动Docker服务
sudo service docker start
7. 功能测试与验证
完成所有配置后,进行全面的功能测试:
-
基本容器测试 :
docker run -it --rm ubuntu:20.04 bash -
网络测试 :
docker run --rm alpine ping -c 4 google.com -
卷挂载测试 :
docker run --rm -v ${PWD}:/data alpine ls /data -
多容器通信测试 :
docker network create test-net docker run -d --name web --network test-net nginx docker run --rm --network test-net curlimages/curl http://web
8. 日常使用技巧
性能优化 :
-
将项目代码放在WSL2文件系统中(
/home目录下)而非Windows挂载目录(/mnt/c) -
对于大型项目,考虑使用
.dockerignore文件减少构建上下文
常用命令快捷方式 :
# 清理无用容器和镜像
alias docker-clean='docker rm $(docker ps -aq) 2>/dev/null; docker rmi $(docker images -q -f "dangling=true") 2>/dev/null'
# 快速进入容器
alias docker-bash='docker exec -it $(docker ps -lq) bash'
日志查看技巧 :
# 跟踪容器日志
docker logs -f container_name
# 查看Docker守护进程日志
journalctl -u docker.service -f
在实际项目中,我发现最常遇到的问题往往是网络配置和权限问题。保持WSL2和Docker版本的最新,可以避免很多兼容性问题。对于企业开发环境,建议使用固定版本的Docker以避免意外升级带来的问题。
更多推荐


所有评论(0)