在 Ubuntu 26.04 (WSL2) 上通过阿里云镜像源安装 Docker CE 完整教程

发布时间:2026/7/1 20:37:05
在 Ubuntu 26.04 (WSL2) 上通过阿里云镜像源安装 Docker CE 完整教程 在 Ubuntu 26.04 (WSL2) 上通过阿里云镜像源安装 Docker CE 完整教程适用环境Ubuntu 26.04 LTSresolute、WSL2systemd 已启用、外网受限的内网/中国大陆网络本教程包含环境检测 → 安装 → 用户组配置 → 镜像加速器配置解决 Docker 29 containerd-snapshotter 镜像失效问题→ 验证目录环境检测可行性分析Docker CE 安装用户组配置镜像加速器配置验证常见问题排查常用命令速查1. 环境检测1.1 系统信息uname-acat/etc/os-release应当看到Linux ... 6.18.x-microsoft-standard-WSL2 # ... x86_64 GNU/Linux PRETTY_NAMEUbuntu 26.04 LTS VERSION_CODENAMEresolute1.2 关键依赖检查# systemd 必须启用WSL2 默认在 /etc/wsl.conf 中设置 [boot] systemdtrueps-p1-ocomm# cgroup v2 必须挂载stat-fc%T /sys/fs/cgroup/# 应输出 cgroup2fs# 必须有 curlcurl--version|head-1# 必须有 iptables 或 nftablesDocker 网络依赖whichiptables||whichnft如果iptables/nftables不存在先安装sudo apt-get install -y iptables1.3 用户与磁盘whoamiid# 必须包含 sudo 组df-h/# 至少 5 GB 可用free-h# 至少 1 GB 可用2. 可行性分析2.1 检查阿里云镜像是否支持你的发行版curl-s-o/dev/null-w%{http_code}\n\https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/$(./etc/os-releaseecho$VERSION_CODENAME)/Release输出200→支持可继续输出404→ 当前 codename 未收录可改用jammy22.04兜底2.2 检查镜像源 GPG 可达性curl-s-o/dev/null-w%{http_code}\n\https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg应输出200。3. Docker CE 安装一键脚本推荐# 3.1 预装系统依赖sudoapt-getupdatesudoapt-getinstall-yca-certificatescurlgnupg iptables# 3.2 添加阿里云 Docker GPG 公钥sudoinstall-m0755-d/etc/apt/keyringscurl-fsSLhttps://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg\|sudogpg--dearmor-o/etc/apt/keyrings/docker.gpgsudochmodar /etc/apt/keyrings/docker.gpg# 3.3 写入阿里云 apt 源自动取当前 Ubuntu codenameechodeb [arch$(dpkg --print-architecture)signed-by/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu$(./etc/os-releaseecho$VERSION_CODENAME)stable\|sudotee/etc/apt/sources.list.d/docker.list/dev/null# 3.4 安装 Docker CE 及全家桶sudoapt-getupdatesudoapt-getinstall-ydocker-ce docker-ce-cli containerd.io\docker-buildx-plugin docker-compose-plugin# 3.5 启动并设置开机自启sudosystemctlenable--nowdockersudosystemctlenable--nowcontainerd3.6 验证安装docker--version# Docker Engine 版本dockercompose version# Compose 插件版本注意是空格containerd--versionsudosystemctl is-activedocker# 应输出 active预期输出示例Docker version 29.6.1, build 8900f1d Docker Compose version v5.2.0 containerd containerd.io 2.2.5 active4. 用户组配置把当前用户加入docker组使普通用户免sudo使用 docker。sudousermod-aGdocker$USER# 验证id$USER|grepdocker# 应包含 (docker)⚠️WSL2 中组员关系需要重新登录才能生效。在 WSL 终端中执行exit后再次进入或在当前 shell 临时生效newgrpdocker# 等价于重新登录到含 docker 组的会话5. 镜像加速器配置5.1 核心问题Docker 29 踩坑必看Docker 29.x 默认启用containerd snapshotter存储驱动显示为overlayfs / driver-type: io.containerd.snapshotter.v1。在该模式下daemon.json中的registry-mirrors不会生效会出现日志Host doesnt match cfgHostregistry-1.docker.io hostmirror即使镜像源可达pull 仍会回落到registry-1.docker.io然后超时解决方法关闭 containerd snapshotter回到经典 overlay2 模式。5.2 配置步骤sudotee/etc/docker/daemon.json/dev/nullEOF { features: { containerd-snapshotter: false }, registry-mirrors: [ https://docker.xuanyuan.me, https://docker.1ms.run, https://docker.m.daocloud.io ], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, storage-driver: overlay2 } EOF# 强制重启systemctl restart 在某些场景下不会完全重启 dockerd必须 killsudosystemctl stopdockercontainerdsudokillall-9dockerd containerd2/dev/nullsleep3sudosystemctl start containerdsudosystemctl startdockersleep45.3 验证镜像源生效sudodockerinfo|grep-A4Registry Mirrors:预期输出Registry Mirrors: https://docker.xuanyuan.me/ https://docker.1ms.run/ https://docker.m.daocloud.io/同时检查存储驱动sudodockerinfo|grep-A2Storage Driver应显示Storage Driver: overlay2不再是overlayfs containerd snapshotter。6. 验证6.1 拉取并运行 hello-worldsudodockerpull hello-worldsudodockerrun--rmhello-world预期结尾输出Hello from Docker! This message shows that your installation appears to be working correctly. ...6.2 验证免 sudo需重新登录后dockerpsdockerimagesdockercompose version6.3 验证 compose 插件mkdir-p/tmp/test-composecd/tmp/test-composecatdocker-compose.ymlEOF services: hello: image: hello-world EOFsudodockercompose up7. 常见问题排查Q1pull 镜像一直超时但镜像源 ping 可达症状failed to do request: Head https://registry-1.docker.io/v2/...: dial tcp ...:443: i/o timeout warning msgHost doesnt match cfgHostregistry-1.docker.io hostmirror原因Docker 29 默认 containerd snapshotter 模式使registry-mirrors失效。解决参见 §5.2关闭 snapshotter 并kill -9重启。Q2sudo systemctl restart docker后 PID 不变配置未生效原因systemd 的Restart配置有时不会完全重启 dockerd。解决sudo killall -9 dockerd containerd后再systemctl start。Q3docker compose报command not found原因未安装docker-compose-plugin。解决sudo apt-get install docker-compose-plugin新命令格式是docker compose带空格不是docker-compose。Q4用户加入 docker 组后仍需 sudo原因组成员关系需重新登录会话才生效。解决在 WSL 中exit后重新进入或在当前 shell 执行newgrp docker或重启 WSL在 PowerShell 中wsl --shutdown然后重开Q5MySQL 官方源报Release 404症状Ign:6 http://repo.mysql.com/apt/ubuntu resolute InRelease / Err:7 ... Release / 404 Not Found原因第三方源如 MySQL 官方尚未支持 Ubuntu 26.04 codename。解决暂时禁用该源或改用 Docker 部署 MySQL。sudols/etc/apt/sources.list.d/# 找到 mysql 源sudomv/etc/apt/sources.list.d/mysql.list /etc/apt/sources.list.d/mysql.list.baksudoapt-getupdateQ6能否让多个用户共享 dockersudousermod-aGdockeruser1sudousermod-aGdockeruser2# 这些用户重新登录后均免 sudo 使用 docker8. 常用命令速查8.1 Docker 服务管理sudosystemctl statusdocker# 查看状态sudosystemctl startdocker# 启动sudosystemctl stopdocker# 停止sudosystemctl restartdocker# 重启不可靠时用 killallsudojournalctl-udocker-f# 查看日志8.2 镜像操作dockerimages# 列出本地镜像dockersearch nginx# 搜索镜像若镜像源支持dockerpull nginx:1.27# 拉取镜像dockerrmi nginx:1.27# 删除镜像dockerimage prune-a# 清理未使用镜像dockertag nginx:1.27 mynginx:v1# 打标签8.3 容器操作dockerps-a# 列出所有容器dockerrun-d--nameweb-p80:80 nginx:1.27# 后台启动dockerlogs-fweb# 查看日志dockerexec-itwebbash# 进入容器dockerstop web# 停止容器dockerstart web# 启动容器dockerrm-fweb# 强制删除容器8.4 docker composev2 插件dockercompose up-d# 后台启动dockercompose down# 停止并删除dockercomposeps# 查看状态dockercompose logs-f# 查看日志dockercompose pull# 拉取所有镜像dockercomposeexecwebbash# 进入服务8.5 网络与卷dockernetworkls# 网络列表dockernetwork create mynet# 创建网络dockervolumels# 卷列表dockervolume create mydata# 创建卷dockersystemdf# 磁盘占用dockersystem prune-a# 清理所有未使用资源附录 A本教程实测环境快照OS: Ubuntu 26.04 LTS (resolute) Kernel: 6.18.33.1-microsoft-standard-WSL2 CPU: Intel i9-12900H (10C/20T) Memory: 23 GiB Disk: 1 TB (3.3 GB used) systemd: PID 1 systemd cgroup: v2 (cgroup2fs) Docker: 29.6.1 Compose: v5.2.0 containerd: 2.2.5 runc: 1.3.6 Storage: overlay2 (经典模式containerd-snapshotterfalse) User: lhz (sudo docker 组)附录 B配置文件最终样例/etc/docker/daemon.json{features:{containerd-snapshotter:false},registry-mirrors:[https://docker.xuanyuan.me,https://docker.1ms.run,https://docker.m.daocloud.io],log-driver:json-file,log-opts:{max-size:100m,max-file:3},storage-driver:overlay2}/etc/apt/sources.list.d/docker.listdeb [archamd64 signed-by/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu resolute stable