最近在测试环境搭一套基于容器的新服务,需要用到最新的 Docker 引擎。我习惯性地去 apt 源里找,结果发现软件源里还是 24.x 的老版本。Docker 官方其实很早就调整了策略,docker-ce.repo 里如果没主动 enabled 最新版本,默认情况下拿到的也未必是最新的 26.x。与其等着源更新,不如直接用最稳妥的二进制安装方式,指定版本安装 Docker 26.1.4。
选择 Docker 26.1.4 而不是盲目追新,是因为这个版本属于 26.x 系列里比较稳定的一个迭代。26.0 刚出来的时候 containerd 1.7.x 的集成还有些小问题,到了 26.1.x 已经把这些坑基本填平了。这篇文章就完整记录一下我在干净系统上从零安装 Docker 26.1.4 的全过程,包括环境准备、二进制安装、systemd 配置、镜像加速、常见故障排查这几个关键环节。不管你是 Ubuntu、Debian 还是 CentOS,只要内核满足要求,这套流程都能用。
1. 为什么选择二进制方式手动安装 Docker 26.1.4
1.1 包管理器安装和官方二进制安装的差异
大多数人在 Linux 上装 Docker,第一反应都是 apt install docker.io 或者 yum install docker-ce。这两种方式的确方便,但有各自的限制。
apt 源里自带的 docker.io 版本严重滞后,Ubuntu 24.04 的官方源里现在还是 Docker 24.x,很多新特性根本用不上。而 docker-ce.repo 虽然是官方源,但 DNF/YUM 的缓存机制会导致你明明已经添加了官方源,安装时却拿不到最新版本,尤其是国内服务器访问官方源经常超时,版本同步也是个大问题。
直接下载 Docker 官方编译好的二进制压缩包是最可控的方式。这种方式有几个好处:
- 版本完全可控,想装 26.1.4 就装 26.1.4,不会因为源的问题被强制升级或降级
- 不依赖系统包管理器的依赖解析,避免和系统自带的 containerd 或 runc 产生冲突
- 安装路径固定,卸载的时候直接删目录就行,不留垃圾
- 适用于离线环境,把 tar 包下载好拷到内网就能装
1.2 Docker 26.x 系列版本特性回顾
既然要装 26.1.4,就值得了解一下这个版本处于什么位置。Docker Engine 26.0 是 2024 年 4 月发布的,属于比较大的版本跳变,包含了一些 API 层面的更新和 containerd 集成的调整。26.1.x 是它的修复版本,主要解决了 26.0 中 docker build 在某些场景下缓存异常、IPv6 端口映射的一些边界问题,以及 docker compose 和 engine 之间的兼容性细节。
26.1.4 这个具体版本,修复了 docker run 在特定 cgroup v2 环境下的资源限制警告问题。这个坑你在 26.0 上跑容器用 --memory 参数限内存时可能会遇到,日志里会莫名出现 MemoryLimit 相关的 warning,虽然不影响运行,但看着很烦。到了 26.1.4 就干净了。
另外一个值得注意的点是,Docker 26.1.4 开始对 --iptables 的默认行为做了更严格的校验。如果你在宿主机上开启了 firewalld 或者 ufw,Docker 启动时可能会提示 iptables 规则冲突。这个后面在故障排查部分我会详细说。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:内核要求、依赖清理和网络检查
2.1 内核版本要求:为什么必须 3.10 以上
Docker 的所有核心功能,包括容器隔离、资源限制、网络命名空间,都依赖 Linux 内核的 namespace 和 cgroup 特性。老内核虽然在功能上能用,但在 cgroup v2、overlay2 存储驱动、iptables 新语法这些关键模块上会有兼容性问题。
Docker 官方要求内核最低 3.10,但那是针对 RHEL/CentOS 6 时代的说法了。实际使用中,我建议内核至少 4.18 以上,因为 Docker 26.x 默认推荐使用 overlay2 存储驱动,而 overlay2 在 4.x 早期版本上还有些性能问题,到 4.18 才基本成熟。
检查内核版本:
bash复制uname -r
如果内核版本太低,比如 CentOS 7 默认的 3.10,你虽然能装上 Docker 26.1.4,但建议升级内核,不然运行高并发容器时,文件系统 I/O 会成为瓶颈。
2.2 移除旧版本 Docker 组件,避免环境冲突
这一步很多人会跳过,但我觉得必须做。因为旧版本的 Docker 会留下 docker0 网桥配置、残留的 iptables 规则、/var/lib/docker 目录里旧格式的数据,以及 /etc/docker/daemon.json 里不兼容的配置项。
如果你之前用过包管理器安装的 Docker:
bash复制# Ubuntu / Debian
sudo apt remove docker docker-engine docker.io containerd runc
# CentOS / RHEL
sudo yum remove docker docker-client docker-common docker-engine docker-ce
注意,这个操作不会删除 /var/lib/docker 目录,也就是说镜像、容器、卷都还保留着。如果你确定不要这些数据了,可以手动删掉:
bash复制sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
如果你不确定,就暂时别删,装好新版 Docker 后它会在启动时自动做数据格式的迁移。
2.3 网络连通性和 DNS 检查
二进制安装 Docker 本身不需要网络,但下载那个压缩包需要网络。检查一下你能否访问 Docker 官方的下载地址(需要能正常访问外网),如果服务器在国内,我建议直接使用国内镜像站下载压缩包,速度会快很多。下面是几个可用的下载地址:
- Docker 官方 GitHub Releases(需要能访问外网)
- 国内一些云厂商的开源镜像站提供的 docker 二进制包
检查 DNS 解析是否正常:
bash复制getent hos
