Docker 安装教程(在线 + 离线)
适用系统:Ubuntu 20.04 / 22.04 / 24.04、Debian 11 / 12、Linux Mint 等基于 Debian 的发行版。
其他发行版(CentOS / RHEL / openSUSE / Arch)的命令对照见文末。
一、在线安装(推荐)
适合服务器能访问外网(或能访问国内镜像源)的场景。
1.1 卸载旧版本(可选)
bash
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
apt-get remove -y $pkg 2>/dev/null || true
done
1.2 安装依赖
bash
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
1.3 添加 Docker 官方 GPG 密钥
bash
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
国内网络环境建议替换为阿里云镜像源:
bashcurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg \ | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
1.4 添加 Docker apt 源
bash
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME} stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update -y
国内网络环境替换为:
bashecho "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://mirrors.aliyun.com/docker-ce/linux/ubuntu ${UBUNTU_CODENAME} stable" \ > /etc/apt/sources.list.d/docker.list
非 Ubuntu 系统代号对照
| 系统 | 仓库代号 |
|---|---|
| Ubuntu 20.04 | focal |
| Ubuntu 22.04 | jammy |
| Ubuntu 24.04 | noble |
| Debian 11 | bullseye |
| Debian 12 | bookworm |
| Linux Mint 21 | jammy |
| Linux Mint 22 | noble |
非 Ubuntu 系统使用 Debian 仓库,例如 Debian 12:
bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://mirrors.aliyun.com/docker-ce/linux/debian bookworm stable" \
> /etc/apt/sources.list.d/docker.list
1.5 安装 Docker 引擎
bash
DEBIAN_FRONTEND=noninteractive apt-get install -y \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
1.6 启动并设置开机自启
bash
systemctl enable --now docker
systemctl is-active docker # 应输出 active
1.7 验证
bash
docker --version # Docker version 29.x.x
docker compose version # Docker Compose version v2.x
docker run --rm hello-world # 看到 "Hello from Docker!" 即成功
1.8 配置镜像加速器(国内强烈建议)
推荐镜像源(实测可用性排序)
下表为我(截至 2026-09)在多台国内服务器实测的可达性结果,建议优先使用标 ✅ 的源:
| 镜像源 | 可达性 | 说明 |
|---|---|---|
https://docker.m.daocloud.io |
✅ IPv4 | 速度稳定,首选 |
https://hub.crdz.gq |
✅ IPv4 | 可用 |
https://hub.firefly.store |
✅ IPv4 | 可用 |
https://hub.rat.dev |
✅ IPv4 | 可用 |
https://docker.imgdb.de |
✅ IPv4 | 可用 |
https://registry.dockermirror.com |
⚠️ 仅 IPv6 | docker 会回落但较慢 |
https://docker.1panelproxy.com |
⚠️ 仅 IPv6 | 同上 |
https://docker.kejilion.pro |
⚠️ 仅 IPv6 | 同上 |
https://docker.hlmirror.com |
⚠️ 仅 IPv6 | 同上 |
https://docker.1panel.live |
⚠️ 仅 IPv6 | 同上 |
https://hub.geekery.cn |
❌ DNS 失败 | 当前网络无法解析,已剔除 |
https://hub.littlediary.cn |
❌ DNS 失败 | 同上 |
https://docker.rainbond.cc |
❌ DNS 失败 | 同上 |
https://docker.unsee.tech |
⚠️ 仅 IPv6 | 可用 |
https://docker.nastool.de |
⚠️ 仅 IPv6 | 可用 |
https://docker.udayun.com |
⚠️ 仅 IPv6 | 可用 |
https://dhub.kubesre.xyz |
❌ DNS 失败 | 已剔除 |
https://dockerpull.org |
⚠️ 仅 IPv6 | 可用 |
写入 daemon.json
bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub.crdz.gq",
"https://hub.firefly.store",
"https://hub.rat.dev",
"https://docker.imgdb.de",
"https://registry.dockermirror.com",
"https://docker.1panelproxy.com",
"https://docker.kejilion.pro",
"https://docker.hlmirror.com",
"https://docker.1panel.live",
"https://docker.unsee.tech",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://dockerpull.org"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
说明:表中标 ❌ 的 4 个源(
hub.geekery.cn、hub.littlediary.cn、docker.rainbond.cc、dhub.kubesre.xyz)在你这台机器当前网络下 DNS 解析失败,已从推荐列表中剔除;其他源即使仅 IPv6,docker 也会自动尝试并能工作。
1.9 让普通用户免 sudo 用 docker(可选)
bash
usermod -aG docker <用户名>
# 用户需要**重新登录**(断开 SSH 重连)后生效
# 或者临时生效:newgrp docker
二、离线安装(无网络 / 内网环境)
适合无法访问外网的服务器、政务 / 金融内网、隔离环境。
2.1 在能上网的机器上下载安装包
选一台能访问外网的同架构机器(一般是 x86_64,arm64 把 amd64 换成 arm64):
bash
mkdir -p /tmp/docker-offline && cd /tmp/docker-offline
# 可指定版本,例如 5:29.0.0-1~ubuntu.24.04~noble
DOCKER_VERSION="${DOCKER_VERSION:-5:29.0.0-1~ubuntu.24.04~noble}"
UBUNTU_CODENAME="noble"
ARCH="amd64"
BASE_URL="https://download.docker.com/linux/ubuntu/dists/${UBUNTU_CODENAME}/pool/stable/${ARCH}"
for pkg in containerd.io docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin; do
curl -fLO "${BASE_URL}/${pkg}_${DOCKER_VERSION}_${ARCH}.deb"
done
ls -la
如果不知道当前最新版本,可以浏览:
https://download.docker.com/linux/ubuntu/dists/noble/pool/stable/amd64/
找对应文件名。
2.2 把 deb 包拷到目标机
bash
scp /tmp/docker-offline/*.deb root@<目标机IP>:/tmp/docker-offline/
2.3 在目标机上安装
bash
# 先确保基础依赖已安装(内网 apt 源能正常用即可)
apt-get update -y
apt-get install -y \
iptables ca-certificates curl gnupg lsb-release || true
cd /tmp/docker-offline
DEBIAN_FRONTEND=noninteractive dpkg -i *.deb
# 如果报依赖缺失,先补依赖再装
DEBIAN_FRONTEND=noninteractive apt-get install -f -y
DEBIAN_FRONTEND=noninteractive dpkg -i *.deb
2.4 启动并验证
bash
systemctl enable --now docker
systemctl is-active docker
docker --version
docker compose version
docker run --rm hello-world
⚠️ 内网环境
hello-world拉镜像会失败------这是正常的,需要配套内网镜像仓库 (Harbor / Nexus / 阿里云 ACR 等)或预先导入镜像:
bashdocker load -i hello-world.tar
2.5 daemon.json 与用户组(与 1.8 / 1.9 相同)
按需写入 /etc/docker/daemon.json,把镜像源改为内网仓库地址:
bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://<你的内网镜像源>"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
2.6 离线升级 / 批量分发
把整套 /tmp/docker-offline 目录拷到 U 盘 / 内网文件服务器,目标机器批量执行:
bash
for host in $(cat hosts.txt); do
rsync -avz /tmp/docker-offline/ ${host}:/tmp/docker-offline/
ssh ${host} "cd /tmp/docker-offline && dpkg -i *.deb && systemctl restart docker"
done
三、其他发行版(命令对照)
| 发行版 | 包管理器 | 在线安装命令 |
|---|---|---|
| Ubuntu / Debian / Mint | apt | 见上面 §一 |
| CentOS 7 | yum | yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| RHEL 9 / Rocky / Alma 8 / 9 | dnf | dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| openSUSE Leap | zypper | zypper install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| Arch / Manjaro | pacman | pacman -S docker docker-compose(社区包) |
启动命令统一是:
bash
systemctl enable --now docker
四、常见问题排查
| 现象 | 原因 | 处理 |
|---|---|---|
permission denied ... /var/run/docker.sock |
当前 shell 用户不在 docker 组 | newgrp docker 或重连 SSH |
failed to resolve reference ... no such host |
镜像源域名 DNS 解析失败 | 换可用的镜像源,或配置内网 DNS |
Job for docker.service failed |
端口冲突 / iptables 模块缺失 | journalctl -xeu docker.service 看日志 |
deb [arch=...] 源找不到 |
UBUNTU_CODENAME 不对 |
用 lsb_release -cs 或 cat /etc/os-release 查看正确代号 |
gpg: command not found |
没装 gnupg | apt-get install -y gnupg 后重做 |
| 离线安装报依赖错 | 缺依赖包 | 先 apt-get install -f -y 补依赖,再 dpkg -i *.deb |
docker pull 报 dial tcp: lookup ... no such host |
daemon.json 里的镜像源域名无法解析 | 用本文 1.8 表中标 ✅ 的源,或改用内网仓库 |
Docker 安装教程(在线 + 离线)
适用系统:Ubuntu 20.04 / 22.04 / 24.04、Debian 11 / 12、Linux Mint 等基于 Debian 的发行版。
其他发行版(CentOS / RHEL / openSUSE / Arch)的命令对照见文末。
一、在线安装(推荐)
适合服务器能访问外网(或能访问国内镜像源)的场景。
1.1 卸载旧版本(可选)
bash
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
apt-get remove -y $pkg 2>/dev/null || true
done
1.2 安装依赖
bash
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release
1.3 添加 Docker 官方 GPG 密钥
bash
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
国内网络环境建议替换为阿里云镜像源:
bashcurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg \ | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
1.4 添加 Docker apt 源
bash
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME} stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update -y
国内网络环境替换为:
bashecho "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://mirrors.aliyun.com/docker-ce/linux/ubuntu ${UBUNTU_CODENAME} stable" \ > /etc/apt/sources.list.d/docker.list
非 Ubuntu 系统代号对照
| 系统 | 仓库代号 |
|---|---|
| Ubuntu 20.04 | focal |
| Ubuntu 22.04 | jammy |
| Ubuntu 24.04 | noble |
| Debian 11 | bullseye |
| Debian 12 | bookworm |
| Linux Mint 21 | jammy |
| Linux Mint 22 | noble |
非 Ubuntu 系统使用 Debian 仓库,例如 Debian 12:
bash
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://mirrors.aliyun.com/docker-ce/linux/debian bookworm stable" \
> /etc/apt/sources.list.d/docker.list
1.5 安装 Docker 引擎
bash
DEBIAN_FRONTEND=noninteractive apt-get install -y \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
1.6 启动并设置开机自启
bash
systemctl enable --now docker
systemctl is-active docker # 应输出 active
1.7 验证
bash
docker --version # Docker version 29.x.x
docker compose version # Docker Compose version v2.x
docker run --rm hello-world # 看到 "Hello from Docker!" 即成功
1.8 配置镜像加速器(国内强烈建议)
推荐镜像源(实测可用性排序)
下表为我(截至 2026-09)在多台国内服务器实测的可达性结果,建议优先使用标 ✅ 的源:
| 镜像源 | 可达性 | 说明 |
|---|---|---|
https://docker.m.daocloud.io |
✅ IPv4 | 速度稳定,首选 |
https://hub.crdz.gq |
✅ IPv4 | 可用 |
https://hub.firefly.store |
✅ IPv4 | 可用 |
https://hub.rat.dev |
✅ IPv4 | 可用 |
https://docker.imgdb.de |
✅ IPv4 | 可用 |
https://registry.dockermirror.com |
⚠️ 仅 IPv6 | docker 会回落但较慢 |
https://docker.1panelproxy.com |
⚠️ 仅 IPv6 | 同上 |
https://docker.kejilion.pro |
⚠️ 仅 IPv6 | 同上 |
https://docker.hlmirror.com |
⚠️ 仅 IPv6 | 同上 |
https://docker.1panel.live |
⚠️ 仅 IPv6 | 同上 |
https://hub.geekery.cn |
❌ DNS 失败 | 当前网络无法解析,已剔除 |
https://hub.littlediary.cn |
❌ DNS 失败 | 同上 |
https://docker.rainbond.cc |
❌ DNS 失败 | 同上 |
https://docker.unsee.tech |
⚠️ 仅 IPv6 | 可用 |
https://docker.nastool.de |
⚠️ 仅 IPv6 | 可用 |
https://docker.udayun.com |
⚠️ 仅 IPv6 | 可用 |
https://dhub.kubesre.xyz |
❌ DNS 失败 | 已剔除 |
https://dockerpull.org |
⚠️ 仅 IPv6 | 可用 |
写入 daemon.json
bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub.crdz.gq",
"https://hub.firefly.store",
"https://hub.rat.dev",
"https://docker.imgdb.de",
"https://registry.dockermirror.com",
"https://docker.1panelproxy.com",
"https://docker.kejilion.pro",
"https://docker.hlmirror.com",
"https://docker.1panel.live",
"https://docker.unsee.tech",
"https://docker.nastool.de",
"https://docker.udayun.com",
"https://dockerpull.org"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
说明:表中标 ❌ 的 4 个源(
hub.geekery.cn、hub.littlediary.cn、docker.rainbond.cc、dhub.kubesre.xyz)在你这台机器当前网络下 DNS 解析失败,已从推荐列表中剔除;其他源即使仅 IPv6,docker 也会自动尝试并能工作。
1.9 让普通用户免 sudo 用 docker(可选)
bash
usermod -aG docker <用户名>
# 用户需要**重新登录**(断开 SSH 重连)后生效
# 或者临时生效:newgrp docker
二、离线安装(无网络 / 内网环境)
适合无法访问外网的服务器、政务 / 金融内网、隔离环境。
2.1 在能上网的机器上下载安装包
选一台能访问外网的同架构机器(一般是 x86_64,arm64 把 amd64 换成 arm64):
bash
mkdir -p /tmp/docker-offline && cd /tmp/docker-offline
# 可指定版本,例如 5:29.0.0-1~ubuntu.24.04~noble
DOCKER_VERSION="${DOCKER_VERSION:-5:29.0.0-1~ubuntu.24.04~noble}"
UBUNTU_CODENAME="noble"
ARCH="amd64"
BASE_URL="https://download.docker.com/linux/ubuntu/dists/${UBUNTU_CODENAME}/pool/stable/${ARCH}"
for pkg in containerd.io docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin; do
curl -fLO "${BASE_URL}/${pkg}_${DOCKER_VERSION}_${ARCH}.deb"
done
ls -la
如果不知道当前最新版本,可以浏览:
https://download.docker.com/linux/ubuntu/dists/noble/pool/stable/amd64/
找对应文件名。
2.2 把 deb 包拷到目标机
bash
scp /tmp/docker-offline/*.deb root@<目标机IP>:/tmp/docker-offline/
2.3 在目标机上安装
bash
# 先确保基础依赖已安装(内网 apt 源能正常用即可)
apt-get update -y
apt-get install -y \
iptables ca-certificates curl gnupg lsb-release || true
cd /tmp/docker-offline
DEBIAN_FRONTEND=noninteractive dpkg -i *.deb
# 如果报依赖缺失,先补依赖再装
DEBIAN_FRONTEND=noninteractive apt-get install -f -y
DEBIAN_FRONTEND=noninteractive dpkg -i *.deb
2.4 启动并验证
bash
systemctl enable --now docker
systemctl is-active docker
docker --version
docker compose version
docker run --rm hello-world
⚠️ 内网环境
hello-world拉镜像会失败------这是正常的,需要配套内网镜像仓库 (Harbor / Nexus / 阿里云 ACR 等)或预先导入镜像:
bashdocker load -i hello-world.tar
2.5 daemon.json 与用户组(与 1.8 / 1.9 相同)
按需写入 /etc/docker/daemon.json,把镜像源改为内网仓库地址:
bash
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://<你的内网镜像源>"
]
}
EOF
systemctl daemon-reload
systemctl restart docker
2.6 离线升级 / 批量分发
把整套 /tmp/docker-offline 目录拷到 U 盘 / 内网文件服务器,目标机器批量执行:
bash
for host in $(cat hosts.txt); do
rsync -avz /tmp/docker-offline/ ${host}:/tmp/docker-offline/
ssh ${host} "cd /tmp/docker-offline && dpkg -i *.deb && systemctl restart docker"
done
三、其他发行版(命令对照)
| 发行版 | 包管理器 | 在线安装命令 |
|---|---|---|
| Ubuntu / Debian / Mint | apt | 见上面 §一 |
| CentOS 7 | yum | yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| RHEL 9 / Rocky / Alma 8 / 9 | dnf | dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| openSUSE Leap | zypper | zypper install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin |
| Arch / Manjaro | pacman | pacman -S docker docker-compose(社区包) |
启动命令统一是:
bash
systemctl enable --now docker
四、常见问题排查
| 现象 | 原因 | 处理 |
|---|---|---|
permission denied ... /var/run/docker.sock |
当前 shell 用户不在 docker 组 | newgrp docker 或重连 SSH |
failed to resolve reference ... no such host |
镜像源域名 DNS 解析失败 | 换可用的镜像源,或配置内网 DNS |
Job for docker.service failed |
端口冲突 / iptables 模块缺失 | journalctl -xeu docker.service 看日志 |
deb [arch=...] 源找不到 |
UBUNTU_CODENAME 不对 |
用 lsb_release -cs 或 cat /etc/os-release 查看正确代号 |
gpg: command not found |
没装 gnupg | apt-get install -y gnupg 后重做 |
| 离线安装报依赖错 | 缺依赖包 | 先 apt-get install -f -y 补依赖,再 dpkg -i *.deb |
docker pull 报 dial tcp: lookup ... no such host |
daemon.json 里的镜像源域名无法解析 | 用本文 1.8 表中标 ✅ 的源,或改用内网仓库 |