← 全部文章

阿里云 Ubuntu 服务器安装 Docker 完整教程(2026 版)

在阿里云 ECS Ubuntu 上配置 Docker CE 软件源,安装 Docker Engine 与 Compose,验证容器运行,并排查软件源和镜像拉取问题。

文章目录

一、前言

Docker 是一种开源容器技术,可以将应用程序及其依赖打包成容器,方便部署、迁移和维护。

在阿里云 ECS 服务器上使用 Docker,可以快速部署 Nginx、MySQL、Redis、Java、Python、Node.js 等服务。

不过,国内服务器安装 Docker 时,可能遇到以下问题:

curl: (35) Recv failure: Connection reset by peer
Package docker-ce is not available
E: Package 'docker-ce' has no installation candidate
E: Unable to locate package containerd.io

这些问题通常与 Docker 官方软件源访问受限、APT 软件源配置错误或软件包索引未成功更新有关。

本教程采用阿里云提供的 Docker CE 软件包镜像源,并介绍安装、验证、镜像加速、Docker Compose 以及常见问题的解决方法。


二、环境准备

2.1 服务器环境

项目说明
云服务商阿里云 ECS
操作系统Ubuntu 22.04 / 24.04 LTS
CPU 架构x86_64 / ARM64
登录方式SSH
操作用户root 或拥有 sudo 权限的用户
安装软件Docker Engine + Docker Compose V2

本教程命令统一在 root Shell 中执行。普通 Ubuntu 用户请先执行 sudo -i 进入 root Shell,再按顺序操作;完成后使用 exit 退出。仅在 cat > 文件 前添加 sudo 不会提升重定向写入的权限。

2.2 连接服务器

可以通过阿里云控制台的远程连接功能,或通过本地终端连接:

ssh root@服务器公网IP

成功连接后,查看系统版本:

cat /etc/os-release

查看 CPU 架构:

dpkg --print-architecture

查看当前内核:

uname -r

常见 Ubuntu 版本代号:

Ubuntu 版本代号
22.04 LTSjammy
24.04 LTSnoble

后续配置软件源时,会自动读取系统版本代号,无需手动修改。


三、更新 Ubuntu 软件包

首先更新软件包索引:

apt update

安装必要工具:

apt install -y \
  ca-certificates \
  curl \
  gnupg

这些工具主要用于 HTTPS 证书验证、下载文件和管理 Docker 软件源的签名密钥。

如需升级系统软件包,可以在确认业务兼容性后执行:

apt upgrade -y

系统升级不是安装 Docker 的必需步骤。对于已经运行生产业务的服务器,建议先做好快照或备份。


四、检查并处理旧版 Docker

如果服务器是刚购买的全新 Ubuntu 系统,可以直接进入下一步。

如果已经安装过 Docker,先检查:

docker --version
dpkg -l | grep -E 'docker|containerd|runc'

Ubuntu 自带的 docker.io、旧版 docker-compose 等软件包可能与 Docker 官方 CE 软件包发生冲突。

对于确认不再需要的旧版安装,可以按官方建议卸载冲突的软件包。

注意:如果服务器已经运行 Docker 业务,请先备份和评估影响,不要直接执行卸载操作。

卸载冲突软件包:

for pkg in docker.io docker-compose docker-compose-v2 \
  docker-doc docker-buildx podman-docker \
  containerd runc; do
  apt remove -y "$pkg"
done

这里不会主动删除 /var/lib/docker 中存储的数据。

不要随意执行:

rm -rf /var/lib/docker

该操作可能导致已有镜像、容器及数据卷丢失。


五、配置阿里云 Docker 软件源

这是国内阿里云 ECS 安装 Docker 最关键的一步。

5.1 为什么不直接使用 Docker 官方源?

Docker 官方软件源为:

https://download.docker.com/linux/ubuntu

在部分中国内地服务器上,访问该域名时可能出现连接超时、连接被重置等情况。

例如:

curl: (35) Recv failure: Connection reset by peer

因此,阿里云 ECS 可以优先使用阿里云官方文档提供的 Docker CE 软件包镜像源:

http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu

该地址主要面向阿里云网络环境,不保证其他云服务商或所有网络环境均可访问。

5.2 清理之前失败的软件源配置

如果之前反复尝试过配置 Docker 软件源,建议先备份旧配置。

mkdir -p /root/docker-apt-backup

备份可能存在的 Docker 源配置:

mv /etc/apt/sources.list.d/docker.list \
  /root/docker-apt-backup/ 2>/dev/null || true

mv /etc/apt/sources.list.d/docker.sources \
  /root/docker-apt-backup/ 2>/dev/null || true

注意检查 /etc/apt/sources.list.d/ 目录中是否还有其他重复的 Docker 软件源文件,避免产生冲突。

5.3 创建 GPG 密钥目录

install -m 0755 -d /etc/apt/keyrings

5.4 下载 Docker GPG 密钥

先下载密钥文件:

curl -fSL \
  http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg \
  -o /tmp/docker-ce.gpg

确认文件下载成功后,导入密钥:

gpg --batch --yes --dearmor \
  -o /etc/apt/keyrings/docker.gpg \
  /tmp/docker-ce.gpg

修改读取权限:

chmod a+r /etc/apt/keyrings/docker.gpg

完成后删除临时文件:

rm -f /tmp/docker-ce.gpg

安全说明: 上述 HTTP 地址来自阿里云 ECS 官方安装说明。APT 会使用指定的 GPG 密钥验证软件包仓库元数据,但通过 HTTP 首次获取密钥本身没有 TLS 传输保护。对于安全要求较高的环境,应优先使用可正常访问的 HTTPS 地址,并核验密钥指纹。

5.5 自动识别 Ubuntu 版本和 CPU 架构

执行:

ARCH=$(dpkg --print-architecture)
DISTRO=$(. /etc/os-release && echo "$VERSION_CODENAME")

查看识别结果:

echo "$ARCH"
echo "$DISTRO"

例如 Ubuntu 24.04 AMD64 服务器:

amd64
noble

5.6 添加 Docker APT 软件源

执行:

cat > /etc/apt/sources.list.d/docker.list <<EOF
deb [arch=${ARCH} signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu ${DISTRO} stable
EOF

查看是否配置成功:

cat /etc/apt/sources.list.d/docker.list

Ubuntu 24.04 的输出一般类似:

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu noble stable

5.7 更新 Docker 软件包索引

执行:

apt update

注意检查输出是否存在以下错误:

Failed to fetch
404 Not Found
NO_PUBKEY

如果有上述错误,应该先修复软件源问题,不要直接继续安装 Docker。

检查 Docker 是否存在候选安装版本:

apt-cache policy docker-ce

正常情况下应该能看到:

docker-ce:
  Installed: (none)
  Candidate: 5:...
  Version table:
    ...

其中 Candidate 必须是可安装版本。

如果显示:

Candidate: (none)

说明 APT 尚未获得可用的软件包索引,或者当前系统架构、版本没有匹配的软件包。


六、安装 Docker Engine 和 Docker Compose

确认软件源配置成功后,执行:

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

安装的软件包说明:

软件包功能
docker-ceDocker 容器引擎
docker-ce-cliDocker 命令行工具
containerd.io容器运行时
docker-buildx-pluginDocker 镜像构建插件
docker-compose-pluginDocker Compose V2 插件

安装完成后,如果系统出现:

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

这是 Ubuntu 软件包安装过程中常见的系统检查提示,不是错误。

但是该提示本身并不能证明 Docker 安装成功,还需要执行后面的验证步骤。


七、启动 Docker 服务

启动 Docker:

systemctl start docker

设置开机自动启动:

systemctl enable docker

也可以合并为一条命令:

systemctl enable --now docker

检查运行状态:

systemctl status docker

正常情况下可以看到:

Active: active (running)

如需退出状态界面,按 q。

也可以直接执行:

systemctl is-active docker

正常输出:

active

八、验证 Docker 安装

8.1 查看 Docker 版本

docker --version

成功后会显示已安装的 Docker Engine 版本。

8.2 查看 Docker Compose 版本

docker compose version

注意,Docker Compose V2 使用:

docker compose

而不是旧版的:

docker-compose

8.3 查看 Docker 详细信息

docker info

该命令可以查看:

  • Docker 服务端版本
  • 存储驱动
  • CPU 数量
  • 内存容量
  • 镜像及容器统计
  • Docker Root Dir
  • Registry Mirrors

8.4 运行测试容器

执行:

docker run --rm hello-world

如果镜像能够正常拉取,并出现:

Hello from Docker!

说明 Docker 已经具备基本的容器运行能力。

如果命令提示无法访问 Docker Hub,不一定代表安装失败,也可能是国内网络无法正常拉取镜像。


九、配置 Docker 镜像加速

需要区分两个概念:

Docker 软件包镜像源: 用于通过 APT 安装和更新 Docker Engine。

Docker 容器镜像加速器: 用于加速拉取 Nginx、Redis、MySQL 等容器镜像。

二者不是一回事。

9.1 获取阿里云镜像加速地址

进入阿里云容器镜像服务 ACR 控制台:

https://cr.console.aliyun.com/

找到:

镜像工具
  └── 镜像加速器

查看当前账号对应的镜像加速器地址。

需要注意:阿里云官方已说明 ACR 镜像加速服务停止同步最新镜像,因此可能出现镜像不存在或版本不是最新的问题。该加速服务仅面向个人开发场景,不允许再次封装或商业用途,且加速地址仅支持阿里云 ECS 访问,不能将其视为生产环境稳定获取所有 Docker Hub 镜像的保证。

生产环境更建议使用经过验证的企业镜像仓库,或通过 ACR 制品订阅等机制管理所需镜像。

9.2 配置 daemon.json

如果确认账号拥有可用的加速地址,编辑配置:

mkdir -p /etc/docker
nano /etc/docker/daemon.json

如果系统没有 nano:

apt install -y nano

对于尚未存在 daemon.json 的新服务器,可以填写:

{
  "registry-mirrors": [
    "https://你的专属镜像加速地址"
  ]
}

将示例地址替换成 ACR 控制台中实际获取的地址。

如果文件已经存在,需要在现有 JSON 对象中合并 registry-mirrors 字段,不要直接覆盖原有配置。

9.3 验证 JSON 格式

python3 -m json.tool /etc/docker/daemon.json

确认没有 JSON 语法错误。

9.4 重启 Docker

修改配置后执行:

systemctl restart docker

检查镜像加速设置:

docker info

查看输出中的 Registry Mirrors。

注意:重启 Docker 服务可能影响运行中的容器,请在生产环境安排合适的维护窗口。


十、使用 Docker 部署 Nginx

为了验证 Docker 能否实际运行 Web 服务,可以使用 Nginx 进行测试。

10.1 拉取镜像

docker pull nginx:stable

首次拉取需要访问容器镜像仓库。

如果出现超时,请先排查镜像仓库的网络连通性。

10.2 创建并运行容器

docker run -d \
  --name nginx-test \
  --restart unless-stopped \
  -p 8080:80 \
  nginx:stable

参数解释:

参数说明
-d后台运行
--name设置容器名称
--restart unless-stopped设置重启策略
-p 8080:80将服务器 8080 端口映射到容器 80 端口

10.3 查看运行状态

docker ps

可以查看正在运行的容器。

10.4 本机访问测试

curl http://127.0.0.1:8080

如果返回 Nginx 欢迎页面的 HTML,说明容器 Web 服务已经运行。

10.5 公网访问

如果需要通过浏览器访问:

http://服务器公网IP:8080

需要在阿里云 ECS 安全组中按需添加 TCP 8080 入站规则。

生产环境建议只开放必要端口,并限制访问来源,不要无差别开放管理和数据库端口。

另外,Docker 发布容器端口时可能绕过部分 UFW 防火墙规则,因此不要只依赖 UFW 控制容器对外访问。


十一、使用 Docker Compose 部署服务

Docker Compose 可以通过 YAML 文件统一管理多个容器。

安装 docker-compose-plugin 后,无需额外下载独立的 Compose 程序。

11.1 创建项目目录

mkdir -p /opt/docker-demo
cd /opt/docker-demo

11.2 创建 Compose 配置

nano compose.yaml

写入:

services:
  nginx:
    image: nginx:stable
    container_name: nginx-compose
    ports:
      - "127.0.0.1:8081:80"
    restart: unless-stopped

这里将端口绑定在 127.0.0.1,仅允许服务器本机访问,适合做安全的基础测试。

11.3 启动服务

docker compose up -d

11.4 查看服务状态

docker compose ps

11.5 查看日志

docker compose logs -f

按 Ctrl + C 退出日志查看,不会停止容器。

11.6 测试访问

curl http://127.0.0.1:8081

11.7 停止服务

docker compose down

注意:该命令会停止并移除本项目的容器和默认网络。不要随意添加 -v,否则可能删除项目管理的数据卷。


十二、Docker 常用命令

12.1 容器操作

查看运行中的容器:

docker ps

查看所有容器:

docker ps -a

启动容器:

docker start nginx-test

停止容器:

docker stop nginx-test

重启容器:

docker restart nginx-test

查看容器日志:

docker logs -f nginx-test

进入容器:

docker exec -it nginx-test /bin/sh

删除容器:

docker rm nginx-test

12.2 镜像操作

查看本地镜像:

docker images

拉取镜像:

docker pull nginx:stable

删除镜像:

docker rmi nginx:stable

12.3 查看资源占用

docker stats

查看 Docker 磁盘使用:

docker system df

十三、常见问题及解决方案

问题一:curl 连接被重置

错误:

curl: (35) Recv failure: Connection reset by peer

可能原因:

  • 官方下载站网络不通
  • 网络中间设备重置连接
  • 代理或防火墙配置异常
  • TLS 连接建立失败

解决方法:

先测试目标站点:

curl -I --connect-timeout 5 \
  https://download.docker.com

对于阿里云 ECS,可以测试其 Docker 软件包镜像源:

curl -I --connect-timeout 5 \
  http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg

如果镜像源可访问,可以根据本教程第五章重新配置 Docker CE 软件源。

如果无法访问阿里云内网镜像,也可以尝试阿里云公网 HTTPS 镜像地址:

https://mirrors.aliyun.com/docker-ce/linux/ubuntu

切换时需要同步修改 GPG 密钥下载地址和 APT 软件源地址。

问题二:docker-ce 没有安装候选版本

错误:

Package docker-ce is not available
E: Package 'docker-ce' has no installation candidate

首先检查:

cat /etc/apt/sources.list.d/docker.list

然后执行:

apt update

检查:

apt-cache policy docker-ce

如果仍为:

Candidate: (none)

需要检查:

  1. Ubuntu 版本代号是否正确。
  2. CPU 架构是否匹配。
  3. APT 是否成功下载仓库索引。
  4. 是否存在重复或冲突的软件源。
  5. 相关镜像仓库是否提供当前系统版本的安装包。

不建议在软件源未正常工作时反复执行 apt install。

问题三:找不到 containerd.io

错误:

E: Unable to locate package containerd.io

通常表示 Docker CE 软件源没有被正常加载。

执行:

apt-cache policy containerd.io

如果没有候选版本,应优先修复软件源。

问题四:Docker 服务无法启动

错误:

Failed to start docker.service

检查服务状态:

systemctl status docker --no-pager

查看最近日志:

journalctl -u docker -n 100 --no-pager

常见原因包括:

  • daemon.json 格式错误
  • containerd 无法启动
  • 系统网络或存储配置异常
  • Docker 配置参数不兼容

不要在未查看日志的情况下删除 /var/lib/docker。

问题五:Cannot connect to the Docker daemon

错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock

先检查:

systemctl is-active docker

如果服务未启动:

systemctl start docker

如果普通用户无权限访问 Docker Socket,可以按实际需求配置 Docker 用户组。

注意:加入 docker 组的用户通常可以获得等同于 root 的高权限,仅应授予可信用户。

问题六:Docker Hub 镜像拉取超时

错误:

Get "https://registry-1.docker.io/v2/":
i/o timeout

解决思路:

  • 检查服务器出站网络
  • 检查 DNS 解析
  • 检查 Docker Hub 可达性
  • 使用经过验证的镜像仓库
  • 配置可用的镜像加速服务
  • 对生产所需镜像进行固定版本和内部仓库管理

问题七:安装后出现内核更新提示

提示:

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

这是系统更新检查结果,并非 Docker 错误。

继续验证:

docker --version
docker compose version
systemctl is-active docker

以实际命令结果判断安装是否成功。


十四、生产环境建议

在阿里云 ECS 上正式使用 Docker 时,建议遵循以下原则:

  1. 限制安全组端口: 默认仅开放必要的 SSH、HTTP 和 HTTPS 端口。
  2. 不要暴露 Docker API: 禁止将未加保护的 Docker 守护进程接口开放至公网。
  3. 配置容器重启策略: 根据业务要求使用 unless-stopped 等策略。
  4. 使用固定镜像版本: 生产环境避免无控制地使用 latest。
  5. 做好数据持久化: 数据库和重要文件应使用数据卷或其他持久化存储。
  6. 定期备份: 重要业务结合阿里云云盘快照及应用级备份进行保护。
  7. 监控日志和磁盘空间: 防止容器日志和旧镜像长期堆积。
  8. 谨慎升级 Docker: 生产环境应先验证兼容性,再执行升级。

对于已经上线的业务,更新镜像、重启 Docker 和清理数据前都应确认影响范围。


十五、安装完成后的检查清单

完成部署后,建议依次执行:

# 查看 Ubuntu 系统版本
cat /etc/os-release

# 查看 Docker 版本
docker --version

# 查看 Compose 版本
docker compose version

# 查看 Docker 服务状态
systemctl is-active docker

# 查看容器
docker ps

# 查看本地镜像
docker images

# 查看磁盘占用
docker system df

# 查看 Docker 详细信息
docker info

最终确认以下结果:

  • ☐ Docker Engine 已成功安装
  • ☐ Docker Compose V2 可以正常运行
  • ☐ Docker 服务状态为 active
  • ☐ Docker 已设置开机自启
  • ☐ Docker 软件包源能够正常更新
  • ☐ 可以成功获取所需容器镜像
  • ☐ 可以启动和管理容器
  • ☐ 阿里云安全组已按业务需求配置

十六、总结

阿里云 Ubuntu 服务器安装 Docker,核心步骤可以概括为:

更新系统 → 配置 Docker 软件源 → 更新 APT 索引 → 检查安装候选版本 → 安装 Docker → 启动服务 → 验证容器 → 按需配置镜像仓库。

其中最容易出问题的部分不是 Docker 本身,而是中国内地服务器访问 Docker 官方软件源和 Docker Hub 的网络环境。

对于阿里云 ECS,采用阿里云官方说明中的 Docker CE 软件包镜像源,可以作为官方仓库访问异常时的替代方案。

最终应以软件包安装状态、Docker 服务运行状态以及实际容器运行结果,判断整个部署是否成功。


参考文档

  1. Docker 官方 Ubuntu 安装指南 https://docs.docker.com/engine/install/ubuntu/
  1. 阿里云 ECS:在 Linux 上安装 Docker 和 Docker Compose https://help.aliyun.com/zh/ecs/user-guide/install-and-use-docker
  1. 阿里云 ACR:配置镜像加速器 https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images

文档更新日期:2026 年 10 月 14 日。

搜索文章

输入关键词,搜索所有文章。