全系列 Linux 兼容的 Docker 最新版 离线一键安装包

Docker Universal Installer

全系列 Linux 兼容的 Docker 最新版 离线一键安装包。

解决"离线包部署到目标机器后报 GLIBC_2.xx not found"的常见坑。

特性

  • 不依赖系统 glibc 版本 — Docker 29.7.2 + Compose v5.5.0 均为静态链接二进制
  • Docker 29.7.2(最新版) + containerd 2.x + runc 1.x
  • 覆盖两大主流架构x86_64(含 Kylin V10 / CentOS 7+ / Ubuntu 16.04+ / OpenEuler 等)与 aarch64(含华为 Kunpeng / 飞腾 / AWS Graviton)
  • 覆盖主流 init 系统systemd(CentOS 7+、Ubuntu 16.04+、Kylin V10、OpenEuler、AnolisOS、UOS、Deepin 等)
  • 预装常用配置 — DaoCloud 镜像加速、overlay2 存储、json-file 日志轮转
  • 安全 — 自动备份现有二进制、支持一键回滚
  • 可重入install.sh --force 重装;install.sh --uninstall 卸载;install.sh --rollback 回滚
  • 可观测 — 日志写到 /var/log/docker-universal-installer-install.log

支持的系统

理论上支持任何运行 Linux 3.10+ 内核 + systemd 的发行版。已实测/验证兼容:

发行版 glibc 状态
Kylin Linux Advanced Server V10 (Tercel) 2.28 ✅ 实测
CentOS 7 / RHEL 7 2.17
CentOS 8 / RHEL 8 2.28
CentOS 9 / RHEL 9 / Rocky 9 / Alma 9 2.34
Ubuntu 16.04 / 18.04 / 20.04 / 22.04 / 24.04 2.23+
Debian 9 / 10 / 11 / 12 2.24+
OpenEuler 20.03 / 22.03 / 24.03 2.28+
Anolis OS 7 / 8 2.17/2.28
UOS / Deepin 2.28+
openSUSE Leap 15 2.26+

不适配:CentOS 6 及更早(内核 < 3.10)、所有非 systemd 发行版。

包含的组件(v2.0.0 最新版)

组件 版本 备注
docker (CLI) 29.7.2 静态二进制(最新稳定版)
dockerd 29.7.2 静态二进制
containerd 2.x 静态二进制(与 docker 29.7.2 配套)
runc 1.x 静态二进制
docker-init / docker-proxy / ctr 29.7.2 静态二进制
containerd-shim-runc-v2 29.7.2 静态二进制
Docker Compose plugin v5.5.0 静态 Go 二进制(通过 docker compose 调用)

为什么用静态二进制? Docker 官方从某个版本开始,package manager 渠道(yum/apt)的 docker 二进制对系统的 glibc 有要求(28.x+ 要求 glibc ≥ 2.34)。而 Docker 官方在 download.docker.com/linux/static/stable/ 同时提供完全静态的 tarball(不依赖系统 glibc),这正是"全系列兼容"的关键。

目录结构

docker-universal-installer/
├── install.sh                # 主安装脚本(一键安装)
├── uninstall.sh              # 独立卸载脚本
├── README.md                 # 本文件
├── VERSION                   # 2.0.0
├── bin/                      # x86_64 静态二进制(8 个,Docker 29.7.2)
├── bin-arm64/                # aarch64 静态二进制(8 个,Docker 29.7.2)
├── compose/
│   └── docker-compose        # Compose v5.5.0 静态插件
├── systemd/
│   ├── containerd.service
│   ├── docker.service
│   └── docker.socket
└── config/
    └── daemon.json           # 默认配置(含 DaoCloud 国内镜像)

使用方法

1. 拷贝包到目标机器

任选一种方式:

# scp
scp -r docker-universal-installer root@<host>:/root/

# 或压缩后传
tar czf docker-universal-installer.tar.gz docker-universal-installer
scp docker-universal-installer.tar.gz root@<host>:/root/
ssh root@<host> 'cd /root && tar xzf docker-universal-installer.tar.gz'

2. 一键安装

cd /root/docker-universal-installer
sudo bash install.sh                    # 基础安装
sudo bash install.sh --with-compose     # 同时装 docker compose 插件
sudo bash install.sh --no-mirror        # 不用国内镜像(用默认 registry)

安装过程会:

  1. 检测 OS / 架构 / 内核 / systemd / overlay
  2. 备份已有 docker 二进制(到 /var/lib/docker-universal-installer/backup/<时间戳>/
  3. 停掉旧服务
  4. 安装新二进制到 /usr/bin/
  5. 安装 systemd 单元到 /lib/systemd/system/
  6. 写入 /etc/docker/daemon.json(含 DaoCloud 国内镜像)
  7. 启动并自启 containerd + docker
  8. 跑冒烟测试

3. 验证

docker --version        # Docker version 29.7.2
docker info             # 看 Server Version、Storage Driver
docker ps               # 容器列表
docker run --rm hello-world   # 端到端测试

4. 其它命令

sudo bash install.sh --uninstall    # 卸载(保留 /var/lib/docker 镜像数据)
sudo bash install.sh --rollback     # 回滚到上次安装前的状态
sudo bash install.sh --force        # 强制重装
sudo bash install.sh --help

常见问题

Q1: 安装后 docker info 显示 registry-mirrors 是空的?

说明 /etc/docker/daemon.json 已有配置(被保留)。可用 sudo bash install.sh --force --with-compose 覆盖。

Q2: docker pull 拉不到镜像?

检查 /etc/docker/daemon.json 里的 registry-mirrors。若你的网络可达 docker.io,可加 --no-mirror 重装去掉镜像配置。

Q3: 报 failed to start daemon: Error initializing network controller: error obtaining controller instance

通常是 iptables 缺失。在 RHEL/CentOS 系列:yum install -y iptables。在 Debian/Ubuntu:apt install -y iptables

Q4: 报 containerd: failed to load TOML config

确认 /etc/docker/daemon.json 是合法 JSON(用 python3 -m json.tool < /etc/docker/daemon.json 校验)。

Q5: 报 drivr overlay2: unsupported backing filesystem

文件系统不支持 overlay2(如某些网络存储)。可改成 devicemappervfs

{ "storage-driver": "vfs" }

Q6: 报 cannot connect to the Docker daemon at unix:///var/run/docker.sock

服务没起来:systemctl status docker,再 systemctl restart docker

Q7: docker.service 启动失败但 journalctl 看不到错误?

99% 是缺 Delegate=yes(在 [Service] 段)——这是 systemd 允许 dockerd 接管 cgroup 必需的。在我们的包里已经处理好了,如果是自己写 unit,不要漏这个

给打包者的说明

如果你需要重建本包(更新 Docker / Compose 版本):

  1. VERSION
  2. 替换 bin/bin-arm64/ 里的二进制
  • 来源:https://mirrors.aliyun.com/docker-ce/linux/static/stable/{x86_64,aarch64}/docker-X.Y.Z.tgz
  1. 替换 compose/docker-compose
  • 来源:https://github.com/docker/compose/releases/download/vX.Y.Z/docker-compose-linux-x86_64注意 v2.20+ 之后要求 glibc 2.31,已不"通用"。推荐 v5.x 静态版
  1. tar czf docker-universal-installer.tar.gz docker-universal-installer 打包

本包用 Docker 官方静态二进制,正是为了避免不同 glibc 环境的坑——可以放心在任何 Linux 3.10+ + systemd 的机器上用。

版本历史

  • v2.0.0 — 升级到 Docker 29.7.2(最新版),仍然零 GLIBC 依赖
  • v1.0.0 — 首版,Docker 20.10.23 + Compose v5.5.0

License

本包内 Docker 二进制遵循 Apache 2.0(Docker, Inc.)。Compose 遵循 Apache 2.0(Docker, Inc.)。

本安装脚本与文档遵循 MIT。

上一篇 【Linux系统】进程概念
下一篇 【知识讲解】 红黑树的删除讲解