在国内云主机上安装 Docker,最容易踩的坑有两个:用了系统自带的旧版 docker(或被 podan 顶替)、以及装完拉镜像直连 Docker Hub 超时。本文记录一套在 Alibaba Cloud Linux 3 / CentOS 7/8 / RHEL 8/9 上验证过的安装流程,使用阿里云镜像源,并在最后给出 Ubuntu/Debian 的对应做法。

文中所有 IP、密码均为示例(203.0.113.10 为文档保留地址),实际操作请替换成你自己的服务器。

一、安装前检查

# 系统版本
cat /etc/os-release

# 内核版本建议 >= 3.10
uname -r

# 磁盘和内存(Docker 数据默认写 /var/lib/docker)
df -h /
free -h

如果之前装过旧版 Docker(docker、docker-client、docker-engine 等),先卸载:

sudo yum remove -y docker \
                   docker-client \
                   docker-client-latest \
                   docker-common \
                   docker-latest \
                   docker-latest-logrotate \
                   docker-logrotate \
                   docker-engine \
                   podman runc 2>/dev/null || true

旧数据(镜像、容器、卷)在 /var/lib/docker/ 下,卸载包不会删除;确认不需要再手动清理。

二、配置阿里云 yum 源并安装

# 1) 安装必要工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 2) 添加 Docker CE 仓库(阿里云镜像)
sudo yum-config-manager --add-repo \
  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 3) 安装 Docker Engine + compose 插件 + buildx
sudo yum install -y docker-ce \
                    docker-ce-cli \
                    containerd.io \
                    docker-buildx-plugin \
                    docker-compose-plugin

CentOS/RHEL 7 用 yum;RHEL/Alibaba Cloud Linux 3 等 dnf 系系统把 yum 换成 dnf 即可,仓库文件通用。

如果想指定版本(生产环境建议锁定,不要追 latest):

yum list docker-ce --showduplicates | sort -k3
sudo yum install -y docker-ce-3:26.1.3-1.el9 \
                    docker-ce-cli-1:26.1.3-1.el9 \
                    containerd.io \
                    docker-compose-plugin

三、配置国内镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json >/dev/null <<'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.xuanyuan.me"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "20m",
    "max-file": "3"
  },
  "live-restore": true
}
EOF

说明:

  • 公共加速器时灵时不灵,配多个互为备份;可用下面命令探测:
    for m in docker.m.daocloud.io docker.1ms.run hub.rat.dev; do
      timeout 6 curl -s -o /dev/null -w "$m %{http_code}\n" https://$m/v2/
    done

    返回 401 或 200 都算通(401 是 Registry 的正常鉴权响应)。

  • log-opts 给所有容器默认加上日志轮转,避免日志把磁盘写满。
  • live-restore 让 Docker 守护进程重启时容器不中断。

校验配置并启动:

sudo dockerd --validate          # 输出 configuration OK 即可
sudo systemctl enable --now docker
docker version
docker info | grep -A5 "Registry Mirrors"

四、验证安装

docker run --rm hello-world

看到 Hello from Docker! 即成功。再确认 Compose v2 插件:

$ docker compose version
Docker Compose version v2.27.0

注意是 docker compose(带空格的 v2 插件),不需要再装老式的 docker-compose Python 包。

五、让普通用户免 sudo 使用 Docker

sudo usermod -aG docker $USER
# 重新登录后生效;或临时切换:
newgrp docker
docker ps

安全提醒:docker 组等价于 root 权限,只给可信用户加。

六、Ubuntu / Debian 的对应做法

# 卸载旧版
sudo apt-get remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true

# 依赖
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# GPG 与仓库(阿里云镜像)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list >/dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
                        docker-buildx-plugin docker-compose-plugin

Debian 把 URL 和 VERSION_CODENAME 中的 ubuntu 换成 debian。其余 daemon.json、启动、验证步骤完全相同。

七、常见问题

现象 原因与处理
docker: command not found 只装了 CLI 没装 docker-ce,或服务未启动:systemctl status docker
Cannot connect to the Docker daemon 服务没起来;journalctl -u docker -n 100 看具体错误,常见于 daemon.json 语法错误
拉镜像 i/o timeout 加速器不通,按第三节探测更换;也可临时 docker pull docker.m.daocloud.io/library/nginx:1.27 后 docker tag 回官方名
firewalld 相关 iptables 警告 RHEL 系常见,保持 docker 与 firewalld 都为最新版;不要手改 DOCKER-USER 以外的链
端口发布后外部访问不通 先 ss -ltnp 确认宿主在监听,再检查云厂商安全组(安全组在主机防火墙之外,主机内无法放行)
重启 Docker 容器全断 老版本或显式关闭了 live-restore;在 daemon.json 配置后重启一次 Docker 生效

至此 Docker 与 Compose 就绪,后续几篇文章全部基于 docker compose 部署。

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏