Skip to main content

Alibaba Cloud Linux 4 安装 Docker:Moby、Docker CE 与 Compose 完整教程

Dec 21, 2022
面向 Alibaba Cloud Linux 4 ECS 的 Docker 安装与迁移指南,比较原生 Moby 和 Docker CE,覆盖冲突检查、Compose、镜像加速、cgroup v2、验证、升级与安全回滚。
Alibaba Cloud Linux 4 安装 Docker:Moby、Docker CE 与 Compose 完整教程

更新日期:2026-08-31

Alibaba Cloud Linux 4 已经不再沿用 Alibaba Cloud Linux 3 的容器安装思路。新系统基于 Anolis OS 23,使用 6.6 内核并默认采用 cgroup v2;阿里云原生提供、持续维护的容器引擎也从旧版本组件转向 Moby。如果只是需要 dockerdockerd、Docker API 和标准镜像,大多数 ECS 应优先安装 Moby,而不是先接入第三方 Docker CE 仓库。

本文翻新自本站 2022 年的 Alibaba Cloud Linux 3 教程。原 URL 保留,避免旧收藏和外链失效;正文已按 Alibaba Cloud Linux 4 的当前官方安装方式重写。

先给结论:Moby 还是 Docker CE

方案适用场景更新来源注意事项
Moby(推荐)新 ECS、普通 Web 服务、Compose 应用、希望跟随系统安全更新Alibaba Cloud Linux 4 官方软件源命令、服务和 API 与标准 Docker 兼容
Docker CE必须使用 Docker CE 指定版本,或已有严格依赖其 RPM 包名的交付流程Docker CE 的 CentOS 仓库Alibaba Cloud Linux 4 不再以兼容 CentOS 为设计目标,必须先在同规格测试机验证
ACK 容器优化镜像Kubernetes 节点、规模化节点池ACK 与系统镜像生命周期不应把单机 Docker 教程直接套到 ACK 节点

阿里云文档明确说明,Alibaba Cloud Linux 4 默认通过 moby 包提供容器引擎,安装后的 docker 命令、dockerd 服务、API 和容器镜像与标准 Docker 一致。除非业务确实要求 Docker CE,选择 Moby 可以少维护一套外部仓库和兼容版本。

Alibaba Cloud Linux 4 与 3 有什么不同

Alibaba Cloud Linux 3 基于 Anolis OS 8,旧教程需要 dnf-plugin-releasever-adapter 把第三方仓库的 $releasever 映射到兼容版本。Alibaba Cloud Linux 4 基于 Anolis OS 23,不再把“CentOS 兼容替代”作为目标,系统包后缀、核心工具链和默认容器组件都发生了变化。

与安装 Docker 直接相关的区别包括:

  • 内核升级到 6.6,默认使用 cgroup v2。
  • 默认容器引擎为 Moby,并提供 containerd 组件。
  • 继续提供 dnf 和兼容的 yum 命令,但软件仓库结构已经更新。
  • 旧的 dnf-plugin-releasever-adapter --repo alinux3-plus 不适用于 Alibaba Cloud Linux 4。
  • Docker CE 官方没有把 Alibaba Cloud Linux 列为独立验证平台;使用其 CentOS RPM 属于兼容安装,不等于 Docker 官方原生支持该发行版。

截至本文更新日,Alibaba Cloud Linux 4.0.5 镜像已在 2026 年 8 月发布,包含 x86_64、ARM64 和容器优化版本。新建 ECS 时优先使用当前安全镜像;已有实例则应在维护窗口内安装系统更新并确认是否需要重启。

安装前先确认系统与现有数据

先确认机器确实运行 Alibaba Cloud Linux 4,而不是 Alibaba Cloud Linux 3、Anolis OS 或其他 RHEL 系发行版:

cat /etc/os-release
uname -r
uname -m
stat -fc %T /sys/fs/cgroup/

/etc/os-release 应显示 Alibaba Cloud Linux 4;stat 在默认配置下应返回 cgroup2fs。如果系统版本不同,请使用对应发行版的官方安装文档,不要强行执行本文的仓库替换命令。

再检查机器上是否已经存在容器运行时、数据和自定义仓库:

rpm -qa | grep -E '^(docker|moby|containerd|podman)' || true
sudo systemctl status docker --no-pager || true
sudo dnf repolist --enabled
sudo ls -ld /var/lib/docker /var/lib/containerd 2>/dev/null || true

如果这是正在运行业务的旧主机,不要直接卸载软件包。先记录并备份:

sudo docker ps -a
sudo docker image ls
sudo docker volume ls
sudo docker network ls

数据库应通过数据库自身的备份工具生成一致性备份;绑定挂载目录、named volume、Compose 文件、环境变量文件、/etc/docker/daemon.json 和 systemd override 都要纳入备份。ECS 系统盘快照可以作为额外保护,但不能代替数据库一致性备份。

方案一:安装系统原生 Moby(推荐)

新机器可以先刷新仓库元数据并查看待安装版本:

sudo dnf makecache
sudo dnf info moby

确认包来自 Alibaba Cloud Linux 4 官方仓库后安装:

sudo dnf install -y moby
sudo systemctl enable --now docker

安装完成后做四层验证:

docker --version
sudo docker version
sudo docker info
sudo systemctl is-enabled docker
sudo systemctl is-active docker

如果当前网络能够访问 Docker Hub,再运行一次临时测试容器:

sudo docker run --rm hello-world

国内线路拉取失败不等于引擎安装失败。先根据后文配置阿里云镜像加速器,再重试镜像拉取。

安装 Docker Compose 与 Buildx

现在应使用 Compose V2 插件,命令是 docker compose,不再建议下载旧版单文件后继续使用带连字符的 docker-compose

先查看软件源能提供的插件版本:

sudo dnf info docker-compose-plugin docker-buildx-plugin

然后安装插件:

sudo dnf install -y docker-compose-plugin docker-buildx-plugin
docker compose version
docker buildx version

不要把 2022 年教程中的固定 Compose 版本号复制到新服务器。插件随软件仓库更新,更容易审计和升级,也不需要在 /usr/local/bin 手工维护来源不明的二进制文件。

方案二:确实需要时安装 Docker CE

只有在应用要求 Docker CE 的特定版本或 RPM 组件时,才建议走这条路线。Alibaba Cloud Linux 4 官方文档要求从 Docker CE 的 CentOS 仓库中选择 9 或 10 的仓库版本;Docker 官方当前也只把受维护的 CentOS Stream 9 和 10 列入支持范围。

这并不代表 Alibaba Cloud Linux 4 等同于 CentOS。阿里云已经明确说明,新系统不再以 CentOS 兼容替代为产品目标。因此应该先在与生产相同架构、镜像版本和安全策略的测试 ECS 上验证依赖解析、容器网络、存储驱动和重启恢复。

1. 排查冲突,不要直接删除数据

若机器已装 Moby 或另一套 Docker,请先完成前述备份。使用 --assumeno 只预览 DNF 将移除哪些包,命令会在事务确认处自动取消:

sudo dnf remove --assumeno \
  docker \
  moby \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-ce-rootless-extras \
  docker-buildx-plugin \
  docker-compose-plugin

确认事务不会误删业务依赖、备份可以恢复后,移除 --assumeno 并重新执行。卸载 RPM 默认不会清除 /var/lib/docker,但同一个数据目录跨引擎或跨版本直接复用并不是可靠的回滚方案;重要工作负载必须先验证备份和恢复。

2. 添加仓库并固定兼容版本

在阿里云 ECS 内可使用内网镜像地址:

sudo dnf install -y wget ca-certificates
sudo wget -O /etc/yum.repos.d/docker-ce.repo \
  http://mirrors.cloud.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i \
  's|https://mirrors.aliyun.com|http://mirrors.cloud.aliyuncs.com|g' \
  /etc/yum.repos.d/docker-ce.repo

非阿里云服务器应使用 https://mirrors.aliyun.com,不要请求仅供阿里云内网使用的 mirrors.cloud.aliyuncs.com

然后只选择一个兼容仓库版本。下面以 CentOS 9 仓库为例;若团队决定验证 CentOS 10,应把命令中的 9 改为 10,而不是连续执行两条替换命令:

sudo cp /etc/yum.repos.d/docker-ce.repo \
  /etc/yum.repos.d/docker-ce.repo.before-releasever
sudo sed -i 's|$releasever|9|g' /etc/yum.repos.d/docker-ce.repo
sudo dnf clean all
sudo dnf makecache
sudo dnf list docker-ce --showduplicates

在安装前确认候选包架构与版本符合预期。生产环境建议把已验证的版本写入变更单,不要在所有节点无 canary 地追随 latest

3. 安装并启动 Docker CE

sudo dnf install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin
sudo systemctl enable --now docker

验证包来源、服务和插件:

rpm -qi docker-ce docker-ce-cli containerd.io
sudo docker version
sudo docker info
docker compose version
docker buildx version

Docker 仓库导入 GPG 密钥时,应核对 Docker 官方文档公布的指纹,不要对来源不明的密钥直接确认。

配置阿里云容器镜像加速器

阿里云为每个账号提供专属镜像加速地址。登录容器镜像服务控制台,在“镜像工具 → 镜像加速器”中复制自己的地址。不要把别人的专属地址写进公开脚本。

如果 /etc/docker/daemon.json 已经存在,先备份并合并字段,不要用重定向直接覆盖:

sudo install -d -m 0755 /etc/docker
sudo cp -a /etc/docker/daemon.json \
  /etc/docker/daemon.json.before-mirror 2>/dev/null || true
sudoedit /etc/docker/daemon.json

配置结构如下,把示例字符串替换为控制台给出的专属地址:

{
  "registry-mirrors": ["https://你的专属地址.mirror.aliyuncs.com"]
}

保存后先检查 JSON 语法,再在维护窗口重启 Docker:

python3 -m json.tool /etc/docker/daemon.json >/dev/null
sudo systemctl restart docker
sudo docker info

重启 docker 会影响正在运行的容器;是否自动恢复取决于 restart policy、应用状态和外部依赖。生产主机应先检查 docker inspect 中的重启策略,并在 canary 节点验证。

用 Compose 做一次最小验证

创建独立测试目录:

mkdir -p ~/docker-smoke-test
cd ~/docker-smoke-test

新建 compose.yaml

services:
  web:
    image: nginx:alpine
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped

然后启动并验证:

sudo docker compose config
sudo docker compose up -d
curl --fail http://127.0.0.1:8080/
sudo docker compose ps
sudo docker compose down

示例只监听本机回环地址,不会直接把 8080 端口暴露到公网。真实服务需要同时审查 Docker 端口映射、ECS 安全组、主机防火墙和应用鉴权,不能只依赖其中一层。

升级、切换和回滚

Moby 升级

先查看变更,再在维护窗口更新:

sudo dnf check-update moby docker-compose-plugin docker-buildx-plugin || true
sudo dnf update moby docker-compose-plugin docker-buildx-plugin

更新后检查 systemctl status docker、容器状态、日志、网络、卷挂载和应用探针。多节点服务应先升级 canary,再分批滚动。

Docker CE 升级

sudo dnf list docker-ce --showduplicates
sudo dnf check-update \
  docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin || true

选定并验证目标版本后再安装,不要把仓库大版本从 9 改到 10 与 Docker Engine 升级合并为一次生产变更。

从 Docker CE 切回 Moby

先停止业务、备份并记录版本,然后移除 Docker CE 组件和对应仓库,再安装 Moby。切换前必须在测试机验证现有 /var/lib/docker 是否可被目标版本安全读取;无法确认时,应通过镜像仓库、Compose/配置文件和卷备份重建,而不是赌元数据向后兼容。

常见问题

releasever 导致仓库路径不存在

Alibaba Cloud Linux 4 的系统 release 不是 CentOS 的 9 或 10。Docker CE 路线必须按阿里云当前文档在仓库文件中选择兼容版本。不要重新安装 Alibaba Cloud Linux 3 的 releasever-adapter

mobydocker-ce 冲突

两者都提供 Docker 服务及相关组件,不能在同一主机上当作两套独立引擎并排安装。先选择路线,再通过 dnf 查看冲突和替换事务。

Compose 命令不存在

先确认使用的是 docker compose version,不是旧命令 docker-compose。然后检查 docker-compose-plugin 是否已安装,以及插件是否来自当前启用的软件仓库。

容器在升级后无法启动

依次检查:

sudo systemctl status docker --no-pager
sudo journalctl -u docker -n 200 --no-pager
sudo docker ps -a
sudo docker info

重点核对 cgroup v2 兼容、存储空间、daemon.json 语法、镜像架构、端口冲突和 SELinux 日志。不要为了快速恢复就永久关闭 SELinux 或清空 Docker 数据目录。

普通用户执行 Docker 提示权限不足

将用户加入 docker 组通常可以免 sudo 使用 Docker,但该组基本等同于主机 root 权限。多人服务器不要把它当普通开发权限随意分配;优先通过受控运维入口、最小权限和审计管理生产容器。

上线检查清单

  • 已确认系统为 Alibaba Cloud Linux 4,架构与内核符合预期。
  • 已明确选择 Moby 或 Docker CE,没有混装组件。
  • 生产数据、配置、卷和数据库已有可恢复备份。
  • Docker CE 兼容路线已在同规格 canary 验证。
  • Docker、containerd、Buildx 与 Compose 版本已记录。
  • 镜像加速地址来自自己的阿里云账号,daemon.json 语法正确。
  • 容器重启策略、端口映射、安全组和防火墙已复核。
  • 升级后已验证服务状态、日志、存储卷、网络与应用探针。
  • 已准备可执行的回滚或重建方案,而不是只写“卸载重装”。

官方资料与继续阅读