news 2026/9/26 22:57:24

Docker 24.0.5 内网离线安装实战:依赖对齐与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 24.0.5 内网离线安装实战:依赖对齐与避坑指南

简介:本资源为 Docker 24.0.5 的离线安装包,面向无法访问外网或内网环境受限的运维与开发人员,帮助其在 CentOS 7 等系统上快速完成容器引擎部署。包内共 18 个文件,以 17 个 rpm 依赖包和 1 个 install_docker.sh 安装脚本为主,压缩包约 108.02MB,涵盖 docker-ce、docker-ce-cli、containerd.io、docker-buildx-plugin、docker-compose-plugin 等核心组件,以及 container-selinux、fuse-overlayfs、slirp4netns 等运行依赖,免去逐一下载的麻烦。执行脚本即可自动安装并启动 Docker,同时附带 docker compose 命令,需注意脚本需运行两遍以确保依赖完整。目前已有 934 人学习下载,适合需要在内网、离线或隔离环境中搭建 Docker 环境的技术人员参考使用。

1. 内网服务器装 Docker 24.0.5:为什么离线包比在线脚本更靠谱

很多做交付的工程师都遇到过这种场景:客户机房完全断外网,只有一台跳板机能连内网,服务器是 CentOS 7 或者 Ubuntu 20.04,要求在上面跑 Docker 24.0.5。你习惯性地敲curl -fsSL https://get.docker.com | sh,结果卡在第一步——域名解析都出不去。这时候在线安装脚本、docker 镜像源、docker 安装教程里讲的那套全部失效,唯一能走的路就是离线安装。

Docker 24.0.5 是 24.x 系列里一个相对稳定的补丁版本,containerd、runc、docker-ce-cli 这几个组件的版本耦合比较清晰,适合做离线交付的基线。离线安装的本质,是把官方仓库里的 rpm/deb 包和它依赖的包提前在能联网的机器上下载齐,再整体搬到目标机用本地包管理器装。它解决的不是「怎么装得快」,而是「在没有任何外网出口的环境里,怎么装得可复现、可回滚」。这篇文章面向的是要在内网、隔离网、生产机房做 Docker 落地的运维和交付工程师,从依赖梳理、包下载、传输、安装到验证,把每一步的命令和参数都摊开讲,顺带把几个我踩过的坑标出来。

2. 离线安装前必须搞清的依赖关系与版本对齐

2.1 Docker 24.0.5 到底由哪些包组成

在线装的时候你感知不到,因为脚本帮你把依赖都拉了。离线装就必须自己拆清楚。以 CentOS 7 / RHEL 7 系为例,Docker 24.0.5 的完整安装通常涉及这几个包:

包名作用是否必须
docker-ceDocker 引擎主程序(dockerd)必须
docker-ce-clidocker 命令行客户端必须
containerd.io容器运行时,dockerd 依赖它必须
docker-buildx-pluginbuildx 构建插件可选
docker-compose-plugincompose v2 插件可选
docker-ce-rootless-extrasrootless 模式支持可选

关键点是 containerd.io 的版本必须和 docker-ce 24.0.5 匹配。24.0.5 一般搭配 containerd.io 1.6.x,如果你随手拿了一个 1.7.x 的 containerd.io,装是能装上,但启动时可能出现运行时接口不兼容的报错。我一般会去 Docker 官方仓库的目录列表里,找到 24.0.5 对应的那一批包,按同一时间点的版本一起下。

2.2 系统基础依赖不能漏

除了 Docker 自己的包,操作系统层面还有一批依赖。CentOS 7 上常见的是libcgroup、device-mapper-libs、iptables、libseccomp。这些包在最小化安装的系统里往往缺失,而离线环境下 yum 又没法自动补。做法是先在目标机上跑一遍依赖检查:

# 在目标机上检查关键依赖是否已安装 rpm -q libcgroup device-mapper-libs iptables libseccomp # 如果有 not installed 的,记下来,一并加入离线包清单

逻辑说明:rpm -q只查询不安装,用来摸清目标机现状。参数就是包名,多个包可以一次查。输出里出现package xxx is not installed的,就是你要额外补的。这一步别省,我见过太多人包都传上去了,装到一半报依赖缺失,又得重新回联网机下载。

2.3 版本对齐:别让 cli 和 engine 打架

docker-ce 和 docker-ce-cli 的版本号必须一致,都是 24.0.5。有人图省事,cli 用了系统里残留的旧版本,结果docker version里 Client 和 Server 对不上,某些子命令直接报错。离线安装时,建议把这两个包锁定在同一版本,安装命令里显式带上完整版本号,而不是让包管理器自己挑。

提示:在联网机上准备包时,用yumdownloader或apt-get download时就把版本号写死,避免下到最新版。

3. 在联网机上把 24.0.5 的离线包一次性下齐

3.1 用 yumdownloader 抓取 rpm 包(CentOS / RHEL 系)

联网机需要和目标是同一大版本的系统,比如都是 CentOS 7,否则依赖解析会错位。先装下载工具,再指定版本下载:

# 安装下载工具 yum install -y yum-utils # 添加 Docker 官方仓库(仅用于下载,不安装) yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 下载指定版本的包及其依赖,--resolve 会自动带上依赖 yumdownloader --resolve --destdir=/tmp/docker-offline \ docker-ce-24.0.5 \ docker-ce-cli-24.0.5 \ containerd.io-1.6.24 \ docker-buildx-plugin \ docker-compose-plugin

逻辑说明:--resolve是关键参数,它会把目标包依赖的其他包一起下载到--destdir指定的目录。版本号我写的是 24.0.5 和 containerd.io 1.6.24,实际以仓库里存在的为准,可以用yum list available docker-ce --showduplicates先看有哪些版本。下载完/tmp/docker-offline里会是一堆 rpm 文件,这就是你的离线包集合。

3.2 Ubuntu / Debian 系用 apt-get download

Ubuntu 上的思路一样,只是工具换成 apt。注意 apt 默认不解析依赖下载,需要配合--download-only或者手动补依赖:

# 添加 Docker 仓库并更新索引 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" apt-get update # 只下载不安装,包会落在 /var/cache/apt/archives apt-get install --download-only -y \ docker-ce=5:24.0.5-1~ubuntu.20.04~focal \ docker-ce-cli=5:24.0.5-1~ubuntu.20.04~focal \ containerd.io

逻辑说明:--download-only让 apt 把 deb 包下到缓存目录但不执行安装。版本号里的5:是 epoch,~ubuntu.20.04~focal是发行版标记,写错会找不到包。下载完把/var/cache/apt/archives里的 deb 拷出来即可。

3.3 打包传输与校验

把下载目录整体打包,顺便生成校验值,传到目标机后先验一遍完整性:

# 打包 tar czf docker-24.0.5-offline.tar.gz -C /tmp docker-offline # 生成校验值 sha256sum docker-24.0.5-offline.tar.gz > docker-24.0.5-offline.sha256 # 目标机上校验(传输后执行) sha256sum -c docker-24.0.5-offline.sha256

逻辑说明:tar czf打包压缩,-C切换目录避免把绝对路径打进去。sha256sum -c会读取校验文件并比对,输出 OK 说明传输没损坏。内网传输走 U 盘或 scp 都可能出问题,这一步是后悔药,别嫌麻烦。

4. 目标机上的离线安装与启动验证

4.1 CentOS 7 本地 rpm 安装

把包传到目标机解压后,用 yum 从本地目录安装,这样依赖关系还能被 yum 处理:

# 解压 tar xzf docker-24.0.5-offline.tar.gz -C /opt # 从本地目录安装,--nogpgcheck 跳过在线签名校验 yum localinstall -y --nogpgcheck /opt/docker-offline/*.rpm

逻辑说明:yum localinstall会读取本地 rpm 并尝试用本地已有的包满足依赖,比直接rpm -ivh更省心。--nogpgcheck是因为离线环境没法联网校验 GPG 签名,跳过它避免安装中断。装完用rpm -qa | grep docker确认包都在。

4.2 Ubuntu 本地 deb 安装

Ubuntu 上用 dpkg 装,缺依赖时用 apt 从本地补:

# 安装全部 deb 包 dpkg -i /opt/docker-offline/*.deb # 如果有依赖报错,用本地源修复 apt-get install -f -y

逻辑说明:dpkg -i直接安装,遇到依赖缺失会报错但不回滚。apt-get install -f会尝试修复依赖,如果本地缓存里有对应 deb 就能补上。前提是这些依赖包也在你的离线集合里。

4.3 启动 dockerd 并验证

安装完不代表能用,必须启动服务并做一次真实拉镜像之外的验证:

# 启动并设置开机自启 systemctl enable --now docker # 查看服务状态 systemctl status docker --no-pager # 验证版本 docker version # 跑一个本地已有镜像或 hello-world(需提前导入镜像) docker info

逻辑说明:systemctl enable --now一步完成开机自启和立即启动。docker version要看到 Client 和 Server 都是 24.0.5。docker info能输出存储驱动、cgroup 驱动等信息,如果这里报Cannot connect to the Docker daemon,说明 dockerd 没起来,去看journalctl -u docker的日志。

注意:离线环境没有镜像仓库,docker run hello-world会失败,这是正常的。验证引擎是否正常,看docker info能否返回即可,别被拉镜像失败误导。

5. 离线安装最容易翻车的几个地方

5.1 现象:装完启动报failed to start daemon: Devices cgroup isn't mounted

原因:CentOS 7 默认可能没挂载 cgroup 的 devices 子系统,或者内核启动参数里禁用了 cgroup。Docker 24.0.5 对 cgroup v1 的依赖还在,但系统层面没准备好。

解决:检查/proc/cgroups里 devices 是否为 1,确认/sys/fs/cgroup/devices存在。如果缺失,需要在/etc/fstab或启动参数里补上 cgroup 挂载,重启后再启动 docker。

5.2 现象:docker info报bridge网络创建失败,提示 iptables 相关错误

原因:目标机没装 iptables 或者 firewalld 与 docker 的规则冲突,也可能是内核模块br_netfilter没加载。

解决:先modprobe br_netfilter,再确认net.bridge.bridge-nf-call-iptables为 1。离线环境里这些内核模块通常系统自带,只是没加载。写进/etc/modules-load.d/让它开机自动加载。

5.3 现象:containerd.io 版本不匹配,dockerd 启动后立刻退出

原因:前面说的版本对齐问题。containerd.io 1.7.x 和 docker-ce 24.0.5 在某些接口上有差异,日志里会出现failed to load containerd之类的字样。

解决:卸载现有 containerd.io,换成 1.6.x 对应版本重装。离线包里最好只保留匹配的那一个版本,避免装错。

5.4 现象:yum localinstall报依赖缺失,但联网机上明明下过

原因:联网机和目标机的系统小版本不一致,比如一个是 CentOS 7.6,一个是 7.9,某些基础库版本不同,导致依赖解析失败。

解决:尽量让下载机和目标机系统版本一致。实在不一致,就在目标机上用rpm -q把缺失的依赖列出来,回联网机单独补下这几个包。

5.5 现象:安装后docker命令找不到

原因:docker-ce-cli 没装上,或者 PATH 里没有/usr/bin。离线安装时如果只装了 docker-ce 主包,cli 是缺失的。

解决:确认 docker-ce-cli 在安装清单里,装完which docker看路径。如果路径不对,检查是否装到了非标准位置。

6. 把离线安装做成可复用脚本与镜像预导入技巧

单次装完不算完,交付场景里你往往要在几十台机器上重复这件事。我的习惯是把整个流程固化成一个自包含的脚本加一个包目录,脚本里做三件事:校验包完整性、按系统类型选安装分支、装完自动做一次docker info健康检查。这样新人拿到目录直接跑,不用理解每一步。

一个简化版的骨架长这样:

#!/bin/bash set -e PKG_DIR="/opt/docker-offline" OS_ID=$(grep -oP '(?<=^ID=).+' /etc/os-release | tr -d '"') # 校验 sha256sum -c "${PKG_DIR}/../docker-24.0.5-offline.sha256" # 分支安装 if [ "$OS_ID" = "centos" ] || [ "$OS_ID" = "rhel" ]; then yum localinstall -y --nogpgcheck "${PKG_DIR}"/*.rpm elif [ "$OS_ID" = "ubuntu" ] || [ "$OS_ID" = "debian" ]; then dpkg -i "${PKG_DIR}"/*.deb || apt-get install -f -y fi # 启动与健康检查 systemctl enable --now docker sleep 3 docker info > /dev/null && echo "docker 24.0.5 就绪" || { echo "启动失败,查 journalctl -u docker"; exit 1; }

逻辑说明:set -e让脚本遇错即停,避免半装状态。grep -oP从/etc/os-release提取系统 ID 做分支判断。最后的docker info重定向到/dev/null只取退出码,成功才打印就绪。这个骨架你可以按自己环境加日志、加回滚。

另一个实用技巧是镜像预导入。离线环境拉不了镜像,但你可以在一台能联网的机器上docker pull好需要的镜像,用docker save导出成 tar,随离线包一起带过去,目标机docker load导入。这样装完引擎立刻就有可用镜像,不用再折腾镜像源。docker save -o nginx.tar nginx:latest导出,docker load -i nginx.tar导入,命令简单,但省掉的是内网里最耗时的环节。

我自己的教训是:第一次做离线交付时只下了 docker-ce 主包,忘了 cli,到了现场发现docker命令都没有,只能灰溜溜回去重下。从那以后我的离线目录里永远多放一份 cli 和 containerd.io 的匹配版本,宁可多占几十兆,也不要在客户机房干等。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 22:57:11

PMD规则文件完全指南:从ruleset.xml到自定义规则实战

简介&#xff1a;PMD是一款开源的Java静态代码分析工具&#xff0c;这份压缩包提供了其核心的规则配置XML文件&#xff0c;面向需要在Eclipse等IDE中开展代码质量检查的Java开发者。规则集按设计、代码规模、空值处理、导入规范、finalizers、未使用代码、基础规范等类别划分&a…

作者头像 李华
网站建设 2026/9/26 22:57:04

数据库原理课后题拆解:关系代数、SQL与范式分解实战验证

简介&#xff1a;这份资源是钱学忠《数据库原理及技术》教材的配套习题答案&#xff0c;面向高校计算机专业学生、备考数据库相关课程考试的学习者&#xff0c;以及希望巩固数据库理论与实践基础的自学者。内容围绕数据库设计、SQL语言、关系数据库理论、数据库管理系统与数据库…

作者头像 李华
网站建设 2026/9/26 22:54:07

Windows RPC服务器不可用:从LSASS到WMI的全链路排错指南

1. 这个错误不是“服务没开”&#xff0c;而是Windows底层通信链路的断点告警“RPC服务器不可用”——这行红色弹窗&#xff0c;几乎每个Windows系统管理员、数据库运维、本地开发人员都见过。它不像“服务未启动”那样直白&#xff0c;也不像“拒绝访问”那样指向权限&#xf…

作者头像 李华
网站建设 2026/9/26 22:53:39

Win11共享‘扩展错误’根因解析与SMB兼容性修复指南

1. 这个“扩展错误”不是报错&#xff0c;是Windows 11在悄悄关掉你的共享通道你刚在Windows 11里右键一个文件夹&#xff0c;点“属性→共享→高级共享”&#xff0c;勾上“共享此文件夹”&#xff0c;点击“确定”——弹窗却冷不丁跳出&#xff1a;“无法完成操作。出现了扩展…

作者头像 李华
网站建设 2026/9/26 22:52:58

OllyDbg调试实战:从安装配置到断点定位与脚本自动化

简介&#xff1a;这是一款面向程序员、安全分析师和逆向工程初学者的 OllyDbg 1.09 汉化版调试工具包。它可动态跟踪程序执行、查看内存映射、设置断点、分析寄存器与堆栈&#xff0c;并把机器码转换为可读汇编指令&#xff1b;汉化界面降低了上手门槛&#xff0c;适合用于软件…

作者头像 李华
网站建设 2026/9/26 22:51:37

深度拆解 rdma_conn_param:从字段含义到配置实战

写RDMA应用的开发者&#xff0c;几乎没有人没遇见过struct rdma_conn_param。但说实话&#xff0c;很长一段时间里我自己对这个结构体的理解也停留在“填个private_data&#xff0c;其它抄默认值”的层面&#xff0c;直到有一次给一个分布式存储项目调连接参数&#xff0c;线上…

作者头像 李华