Docker 安装教程(在线 + 离线)

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

国内网络环境建议替换为阿里云镜像源:

bash 复制代码
curl -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

国内网络环境替换为:

bash 复制代码
echo "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.cnhub.littlediary.cndocker.rainbond.ccdhub.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 等)或预先导入镜像

bash 复制代码
docker 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 -cscat /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

国内网络环境建议替换为阿里云镜像源:

bash 复制代码
curl -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

国内网络环境替换为:

bash 复制代码
echo "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.cnhub.littlediary.cndocker.rainbond.ccdhub.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 等)或预先导入镜像

bash 复制代码
docker 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 -cscat /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 表中标 ✅ 的源,或改用内网仓库
相关推荐
java_logo2 小时前
Docker 部署 Milvus:轻松搭建高性能向量数据库平台
数据库·docker·私有化部署·milvus·向量数据库·rag·轩辕镜像
JudithHuang2 小时前
把本地服务暴露到公网
运维
yt004yt2 小时前
### 越华环保集团|绿岛 VOCs 集中治理,管网系统安全设计工程实战分享
大数据·运维
yt004yt3 小时前
越华环保集团|绿岛 VOCs 集中治理,管网系统安全设计工程实战分享
大数据·运维
晚安日记wanna3 小时前
压测 TPS 卡在 800CPU 只跑四成六步定位法
运维·面试·测试
吴声子夜歌4 小时前
Shell编程实例——bash入门
linux·运维·shell
爱和冰阔落5 小时前
【Linux】条件变量为什么必须配合互斥锁:从 pthread_cond_wait 到阻塞队列
linux·运维·c++·缓存·中间件·安卓
ynchyong5 小时前
Linux nohup 后台服务合并标准错误输出到一个文件
java·linux·运维
牛油果子哥q5 小时前
LLM 服务网关设计:流量分发、鉴权、限流、多模型路由、负载均衡、接口版本管理(C++ 网关落地)
运维·负载均衡