环境要求

  • Windows 11/10 with WSL2
  • Ubuntu 22.04.5 LTS (jammy)
  • WSL2内核版本:5.10.16.3-microsoft-standard-WSL2
  • 足够的磁盘空间(建议至少10GB)
  • 主机做子系统开启网络镜像,在子系统可使用主机的代理网

一、系统准备

1.1 更新系统

# 更新包列表
sudo apt update

# 升级系统包
sudo apt upgrade -y

# 安装必要的依赖包
sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common \
    iptables \
    wget \
    jq

 1.2 配置iptables(WSL2需要)

# 更新iptables替代方案
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

 一、系统准备

2.1 更新系统

# 更新包列表
sudo apt update

# 升级系统包
sudo apt upgrade -y

# 安装必要的依赖包
sudo apt install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common \
    iptables \
    wget \
    jq

 2.2 配置iptables(WSL2需要)

# 更新iptables替代方案
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

 三、Docker仓库配置

3.1 清理可能存在的旧配置

# 删除可能存在的旧配置
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -f /usr/share/keyrings/docker-archive-keyring.gpg
sudo rm -f /usr/share/keyrings/docker.gpg

# 确保目录存在
sudo mkdir -p /usr/share/keyrings

 3.2 添加Docker官方GPG密钥

# 下载Docker GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

# 设置密钥文件权限
sudo chmod a+r /usr/share/keyrings/docker.gpg

 3.3 添加Docker仓库

# 添加Docker仓库到APT源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 更新包列表
sudo apt update

四、Docker配置(安装前配置)

4.1 创建Docker配置目录

# 创建Docker配置目录
sudo mkdir -p /etc/docker

# 设置配置目录权限
sudo chown root:root /etc/docker
sudo chmod 755 /etc/docker

 4.2 创建daemon.json配置文件

# 创建优化的Docker配置文件
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "data-root": "/opt/docker",
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.imgdb.de",
    "https://docker-0.unsee.tech",
    "https://docker.hlmirror.com",
    "https://cjie.eu.org" 
  ],
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5,
  "iptables": true,
  "ip-forward": true,
  "bridge": "docker0",
  "default-address-pools": [
    {
      "base": "172.17.0.0/16",
      "size": 24
    }
  ],
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "insecure-registries": []
}
EOF

 五、安装、启动和配置Docker服务

5.1 安装Docker Engine

# 安装Docker CE及相关组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 5.2 启动Docker服务

# 启动Docker服务
sudo service docker start

 六、配置普通用户免sudo使用Docker

7.1 创建docker用户组并添加用户

# 检查docker组是否存在
getent group docker || echo "docker组不存在,需要创建"

# 创建docker用户组(如果不存在)
sudo groupadd docker 2>/dev/null || echo "docker组已存在"

# 将当前用户添加到docker组
sudo usermod -aG docker $USER

 7.2 配置Docker socket权限

# 设置Docker socket权限
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

 7.3 应用用户组权限

# 使用newgrp命令(当前会话生效)
newgrp docker

八、故障排除指南

8.1 GPG密钥错误

# 如果遇到GPG密钥问题
echo "=== 修复GPG密钥问题 ==="

# 清理旧密钥
sudo rm -f /usr/share/keyrings/docker*

# 重新下载密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
sudo chmod a+r /usr/share/keyrings/docker.gpg

# 验证密钥
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/docker.gpg --list-keys

 8.2 用户权限问题

# 修复用户权限问题
echo "=== 修复用户权限问题 ==="

# 确保docker组存在
sudo groupadd docker 2>/dev/null || echo "docker组已存在"

# 重新添加用户到docker组
sudo usermod -aG docker $USER

# 修复socket权限
sudo chown root:docker /var/run/docker.sock
sudo chmod 660 /var/run/docker.sock

# 应用权限
echo "请选择以下方法之一应用权限:"
echo "1. 运行: newgrp docker"
echo "2. 重新登录WSL终端"
echo "3. 在PowerShell中运行: wsl --terminate Ubuntu-24.04"

8.3 数据目录权限问题

# 修复数据目录权限
echo "=== 修复数据目录权限问题 ==="

# 修复目录权限
sudo chown -R root:root /opt/docker
sudo chmod -R 755 /opt/docker

# 如果/opt/docker有问题,使用备用目录
if [ ! -w /opt/docker ]; then
    echo "⚠️ /opt/docker权限有问题,建议使用备用目录"
    echo "1. 创建备用目录: sudo mkdir -p /home/docker-data"
    echo "2. 修改配置: sudo nano /etc/docker/daemon.json"
    echo "3. 将data-root改为: /home/docker-data"
    echo "4. 重启Docker: sudo service docker restart"
fi

8.4 WSL2网络问题

# 修复WSL2网络问题
echo "=== 修复WSL2网络问题 ==="

# 重启Docker网络
sudo service docker restart

# 检查iptables
sudo iptables -L -n | head -10

# 重新配置iptables
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

# 如果还有问题,在Windows中重启WSL2
echo "如果网络仍有问题,在Windows PowerShell中运行:"
echo "wsl --shutdown"
echo "然后重新打开WSL终端"
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐