在国内云主机上安装 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 部署。
此处评论已关闭