在 Ubuntu 26.04 上安装 Docker CE 教程

发布时间:2026/7/1 20:36:19
在 Ubuntu 26.04 上安装 Docker CE 教程 在 Ubuntu 26.04 上安装 Docker CE 教程适用环境Ubuntu 26.04 LTSresolute、原生 Linux非 WSL2、国内网络本教程特点去掉 WSL2 冗余检测保留国内镜像源与 Docker 29 containerd-snapshotter bug 修复从零到 hello-world 仅需 7 条命令。目录环境检测Docker CE 安装镜像加速器配置用户组配置验证常见问题排查常用命令速查1. 环境检测1.1 系统信息uname-acat/etc/os-release应看到PRETTY_NAMEUbuntu 26.04 LTS VERSION_CODENAMEresolute1.2 关键依赖检查# cgroup v2 必须挂载stat-fc%T /sys/fs/cgroup/# 应输出 cgroup2fs# 必须有 curlcurl--version|head-1# 必须有 iptables 或 nftableswhichiptables||whichnft如果iptables/nftables不存在先安装sudo apt-get install -y iptables1.3 用户与磁盘whoamiid# 必须包含 sudo 组df-h/# 至少 5 GB 可用free-h# 至少 1 GB 可用1.4 阿里云镜像可达性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。2. Docker CE 安装2.1 预装系统依赖sudoapt-getupdatesudoapt-getinstall-yca-certificatescurlgnupg iptables2.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.gpg2.3 写入阿里云 apt 源echodeb [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/null2.4 安装 Docker CE 及全家桶sudoapt-getupdatesudoapt-getinstall-ydocker-ce docker-ce-cli containerd.io\docker-buildx-plugin docker-compose-plugin2.5 启动并设置开机自启sudosystemctlenable--nowdockersudosystemctlenable--nowcontainerd2.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 active3. 镜像加速器配置3.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 模式。3.2 写入 daemon.jsonsudotee/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 } EOF3.3 强制重启服务systemctl restart在某些场景下不会完全重启 dockerd必须kill -9。sudosystemctl stopdockercontainerdsudokillall-9dockerd containerd2/dev/nullsleep3sudosystemctl start containerdsudosystemctl startdockersleep43.4 验证配置生效sudodockerinfo|grep-A4Registry Mirrors:sudodockerinfo|grep-A2Storage Driver预期输出Registry Mirrors: https://docker.xuanyuan.me/ https://docker.1ms.run/ https://docker.m.daocloud.io/ Storage Driver: overlay24. 用户组配置把当前用户加入docker组使普通用户免sudo使用 docker。sudousermod-aGdocker$USERid$USER|grepdocker# 应包含 (docker)组成员关系需要重新登录才能生效。在当前 shell 临时生效newgrpdocker# 等价于重新登录到含 docker 组的会话5. 验证5.1 拉取并运行 hello-worldsudodockerpull hello-worldsudodockerrun--rmhello-world预期结尾输出Hello from Docker! This message shows that your installation appears to be working correctly. ...5.2 验证免 sudo需重新登录后dockerpsdockerimagesdockercompose version如果当前 shell 还没生效可用sg docker -c docker ps临时验证。5.3 验证 compose 插件mkdir-p/tmp/test-composecd/tmp/test-composecatdocker-compose.ymlEOF services: hello: image: hello-world EOFsudodockercompose up预期容器启动并打印Hello from Docker!退出码 0。6. 常见问题排查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失效。解决参见 §3.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原因组成员关系需重新登录会话才生效。解决在终端exit后重新进入或在当前 shell 执行newgrp docker或使用sg docker -c docker ...临时以 docker 组身份执行Q5第三方源如 MySQL 官方报Release 404症状Ign:6 http://repo.mysql.com/apt/ubuntu resolute InRelease / Err:7 ... Release / 404 Not Found原因第三方源尚未支持 Ubuntu 26.04 codename。解决暂时禁用该源或改用 Docker 部署sudomv/etc/apt/sources.list.d/mysql.list /etc/apt/sources.list.d/mysql.list.baksudoapt-getupdateQ6能否让多个用户共享 dockersudousermod-aGdockeruser1sudousermod-aGdockeruser2# 这些用户重新登录后均免 sudo 使用 docker7. 常用命令速查7.1 Docker 服务管理sudosystemctl statusdocker# 查看状态sudosystemctl startdocker# 启动sudosystemctl stopdocker# 停止sudosystemctl restartdocker# 重启不可靠时用 killallsudojournalctl-udocker-f# 查看日志7.2 镜像操作dockerimages# 列出本地镜像dockersearch nginx# 搜索镜像若镜像源支持dockerpull nginx:1.27# 拉取镜像dockerrmi nginx:1.27# 删除镜像dockerimage prune-a# 清理未使用镜像dockertag nginx:1.27 mynginx:v1# 打标签7.3 容器操作dockerps-a# 列出所有容器dockerrun-d--nameweb-p80:80 nginx:1.27# 后台启动dockerlogs-fweb# 查看日志dockerexec-itwebbash# 进入容器dockerstop web# 停止容器dockerstart web# 启动容器dockerrm-fweb# 强制删除容器7.4 docker composev2 插件dockercompose up-d# 后台启动dockercompose down# 停止并删除dockercomposeps# 查看状态dockercompose logs-f# 查看日志dockercompose pull# 拉取所有镜像dockercomposeexecwebbash# 进入服务7.5 网络与卷dockernetworkls# 网络列表dockernetwork create mynet# 创建网络dockervolumels# 卷列表dockervolume create mydata# 创建卷dockersystemdf# 磁盘占用dockersystem prune-a# 清理所有未使用资源附录 A本教程实测环境快照OS: Ubuntu 26.04 LTS (resolute) Kernel: 7.0.0-27-generic原生 Linux非 WSL2 APT 源: mirrors.aliyun.com/ubuntu mirrors.aliyun.com/docker-ce Docker: 29.6.1 Compose: v5.2.0 containerd: 2.2.5 runc: 1.3.6 Storage: overlay2containerd-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附录 C与原教程的差异说明项目原教程WSL2 版本教程精简版适用环境WSL2systemd 启用原生 Linuxsystemd 检测需要ps -p 1 -o comm不需要WSL2 特定步骤/etc/wsl.confsystemd 配置无添加阿里云源✓✓关闭 snapshotter✓✓镜像加速器✓✓killall -9 重启✓✓用户组配置✓✓验证流程hello-world compose同上更详细