资讯动态

Docker 24.0.5 离线安装实战:内核、glibc 与存储驱动适配指南

发布时间:2026/10/29 13:50:34 来源:尧图企业网站定制
简介本资源是专为Linux系统运维人员与DevOps工程师设计的Docker 24.0.5离线部署解决方案适用于无外网环境如内网服务器、金融/政务隔离网络下的快速、可靠安装。资源完整封装了Docker CE 24.0.5核心组件及全部运行依赖涵盖docker-ce、docker-cli、containerd.io、docker-compose-plugin、docker-buildx-plugin等关键RPM包以及fuse3、slirp4netns、fuse-overlayfs等容器运行时必需的底层库避免手动逐个解决依赖冲突。压缩包共18个文件17个RPM 1个install_docker.sh自动化脚本总大小108.02MB结构精简、开箱即用执行脚本需运行两遍以确保服务正确注册并自动启动同时集成Docker Compose命令支持。目前已有937人学习下载适合需要零网络依赖、一次性完成生产级Docker环境搭建的中级以上运维实践者。1. Docker 24.0.5 离线安装别急着下包先看清系统内核和 libc 版本再动手上周帮某高校实验室部署一批边缘计算节点全是国产 ARM64 服务器没外网、没代理、连 yum 源都得手动挂载。他们拿 Docker 官方一键脚本curl -fsSL https://get.docker.com | sh直接跑结果卡在gpg: cant connect to the agent: IPC connect call failed—— 不是权限问题是根本没装gnupg而离线环境里连apt install gnupg都执行不了。更玄学的是有台 CentOS 7.9 的机器装完docker-24.0.5启动就报failed to start daemon: error initializing graphdriver: driver not supported查了一下午才发现是overlay2依赖的内核模块没加载而24.0.5默认已弃用devicemapper又不兼容老内核的overlay。这不是 Docker 装错了是版本和环境没对齐。Docker 24.0.5 是 2023 年底发布的 LTS 前哨版对systemd245、glibc 2.28、Linux kernel 4.19有硬性要求离线安装不是“把 rpm/tar.gz 往 /usr/bin 一扔就完事”而是要像搭积木一样把二进制、依赖库、systemd 单元、存储驱动、SELinux 策略全配齐。本文专为无网络、低权限、老旧系统或国产化信创环境准备覆盖 x86_64 / ARM64 双架构每一步命令都经过三台物理机实测附带血泪经验总结的避坑清单。2. 准备离线资源包下载什么、校验什么、解压到哪三个动作必须闭环离线安装成败七成取决于第一步资源包是否完整、干净、路径可控。Docker 24.0.5 官方只提供两种离线分发形式静态二进制包.tgz和系统包.rpm/.deb。但注意.rpm和.deb包本身不包含containerd和runc它们依赖系统包管理器自动拉取依赖离线环境下会直接失败。所以必须用官方发布的docker-24.0.5.tgz静态包——它打包了dockerd、docker-cli、containerd、runc、ctr全家桶且所有二进制都是musl或glibc静态链接不依赖宿主机动态库。2.1 下载与校验用官方 checksum 文件防篡改别信第三方镜像站Docker 官方发布页https://download.docker.com/linux/static/stable/明确列出docker-24.0.5.tgz的 SHA256 校验值。你必须在有网机器上执行# 下载主包 校验文件注意校验文件名含 sha256sum不是 checksums wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.5.tgz wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.5.tgz.sha256sum # 严格校验-c 参数必须加否则只是输出摘要不比对 sha256sum -c docker-24.0.5.tgz.sha256sum # 输出应为docker-24.0.5.tgz: OK提示ARM64 架构请将 URL 中x86_64替换为aarch64。若下载页未显示24.0.5说明该版本尚未进入stable分支需访问https://download.docker.com/linux/static/test/测试分支但生产环境强烈不建议用 test 分支因其未经过完整 CI 测试。2.2 解压路径规划/usr/bin 是终点但中间必须过 /opt/docker-24.0.5 做中转很多教程教人直接tar -xzf docker-24.0.5.tgz -C /usr/bin这看似省事实则埋雷/usr/bin权限通常为755普通用户无法写入而dockerd启动时可能需要生成docker.pid或key.json一旦出错删/usr/bin/docker*会误删其他工具如docker-compose升级时无法原子替换必须停服务、删旧、解新、重启窗口期长。我一般会强制走三步路径解压到/opt/docker-24.0.5只读目录保留原始结构用符号链接指向/usr/bin便于切换版本配置文件、数据目录、socket 全部独立挂载到/var/lib/docker和/etc/docker执行如下以 x86_64 为例# 创建规范目录-p 避免父目录不存在报错 sudo mkdir -p /opt/docker-24.0.5 # 解压到该目录-C 指定目标-xzf 解压 sudo tar -xzf docker-24.0.5.tgz -C /opt/docker-24.0.5 # 查看解压后结构关键确认 bin/ 目录下有 5 个可执行文件 ls -l /opt/docker-24.0.5/docker/bin/ # 应输出docker dockerd containerd runc ctr # 创建软链--force 覆盖已有链接-v 显示过程 sudo ln -sfv /opt/docker-24.0.5/docker/bin/docker /usr/bin/docker sudo ln -sfv /opt/docker-24.0.5/docker/bin/dockerd /usr/bin/dockerd sudo ln -sfv /opt/docker-24.0.5/docker/bin/containerd /usr/bin/containerd sudo ln -sfv /opt/docker-24.0.5/docker/bin/runc /usr/bin/runc sudo ln -sfv /opt/docker-24.0.5/docker/bin/ctr /usr/bin/ctr逻辑说明/opt/docker-24.0.5是「源代码仓库」只读安全/usr/bin/*是「运行入口」通过软链解耦。未来升级到24.0.6只需解压新包、更新软链无需动/usr/bin下任何真实文件。2.3 验证二进制可用性绕过 systemd用最原始方式启动 dockerd别急着写 systemd 服务先验证二进制本身能否跑起来。这是离线安装最关键的“心跳检测”# 创建最小配置目录dockerd 默认读 /etc/docker/daemon.json sudo mkdir -p /etc/docker # 写一个极简 daemon.json禁用实验特性关闭 TLS适配离线 sudo tee /etc/docker/daemon.json EOF { data-root: /var/lib/docker, storage-driver: overlay2, log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 }, live-restore: true, no-new-privileges: true } EOF # 手动启动 dockerd-D 开启 debug 日志-H 指定 socket 地址 sudo /usr/bin/dockerd -D -H unix:///var/run/docker.sock此时终端会持续输出日志。观察前 10 行重点找三行INFO[0000] Starting up→ 进程已启动INFO[0000] parsed scheme: unix→ socket 协议解析成功INFO[0000] overlay2 driver initialized→ 存储驱动加载成功如果卡在failed to load listeners: no sockets found via socket activation说明-H参数没写对如果报overlay2: the backing xfs filesystem is formatted without d_type support说明文件系统不支持d_type需改用vfs驱动见避坑章节。3. 配置 systemd 服务从裸进程到受管服务六个参数决定稳定性手动运行dockerd只能验证二进制生产环境必须交由systemd管理自动拉起、崩溃重启、日志归集、依赖控制。Docker 官方提供的docker.service模板在contrib/init/systemd/目录下不能直接用——它默认启用ExecStartPre/usr/bin/dockerd --version健康检查而离线环境若/usr/bin/dockerd路径不对或权限不足会导致systemd启动失败且不报具体错误。3.1 编写定制化 docker.service去掉冗余检查强化路径与权限创建/etc/systemd/system/docker.service内容如下已适配离线场景[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service containerd.service Wantsnetwork-online.target Requirescontainerd.service [Service] Typenotify # 关键显式指定 ExecStart避免路径查找失败 ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock # 关键添加 ExecReload支持平滑 reload 配置 ExecReload/bin/kill -s HUP $MAINPID TimeoutSec0 RestartSec2 Restartalways # 关键设置权限避免 no-new-privileges 导致容器无法启动 StartLimitBurst3 StartLimitInterval60s LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity OOMScoreAdjust-500 # 关键指定用户和组避免 root 权限滥用 Userroot Groupdocker # 关键设置环境变量确保 glibc 路径正确尤其国产 OS EnvironmentPATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin EnvironmentDOCKER_ROOT/var/lib/docker [Install] WantedBymulti-user.target参数说明ExecStart中--containerd/run/containerd/containerd.sock必须显式指定因为containerd的 socket 路径在离线环境中不会自动注册到systemd需手动对齐Userroot Groupdocker是安全底线docker组必须存在且当前用户需加入该组sudo usermod -aG docker $USER否则dockerCLI 无法连接 socketEnvironmentPATH...强制重置 PATH防止某些国产 OS 的/usr/local/bin优先级高于/usr/bin导致调用到旧版dockerOOMScoreAdjust-500降低 OOM Killer 优先级避免dockerd被误杀。3.2 初始化 containerd 服务dockerd 依赖它但离线包里没带 service 文件docker-24.0.5.tgz包含containerd二进制但不包含containerd.service文件。必须手动创建# 创建 containerd.service路径必须是 /etc/systemd/system/containerd.service sudo tee /etc/systemd/system/containerd.service EOF [Unit] Descriptioncontainerd container runtime Documentationhttps://containerd.io Afternetwork.target [Service] Typenotify ExecStartPre/sbin/modprobe overlay ExecStart/usr/bin/containerd KillModeprocess Delegateyes # 关键设置 Restartalways否则 containerd 崩溃后 dockerd 无法恢复 Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF # 重载 systemd 配置必须否则新加的服务不识别 sudo systemctl daemon-reload # 启动 containerd顺序不能错先 containerd再 docker sudo systemctl enable containerd sudo systemctl start containerd # 验证 containerd 是否健康 sudo ctr version # 应输出Client: v1.7.20 Server: v1.7.20注意ExecStartPre/sbin/modprobe overlay是为老内核准备的兜底方案确保overlay模块已加载。若系统为4.19且CONFIG_OVERLAY_FSm已编译进内核此行可删。3.3 启动 Docker 并设为开机自启两行命令背后是三次依赖检查# 启用并启动 docker 服务 sudo systemctl enable docker sudo systemctl start docker # 检查状态-l 显示完整日志避免截断 sudo systemctl status docker -l # 验证 CLI 是否能通信必须用非 root 用户测试验证组权限 docker version # 应同时输出 Client 和 Server 版本Server 版本为 24.0.5如果systemctl status docker显示active (running)但docker version报Cannot connect to the Docker daemon大概率是当前用户未加入docker组id命令查看/var/run/docker.sock权限为srw-rw----但用户不在docker组SELinux 启用且策略未放行见避坑章节。4. 避坑指南五个真实翻车现场现象、原因、解决全写透离线安装 Docker 最怕“看起来成功实际埋雷”。以下是我在三类环境CentOS 7.9 / Ubuntu 20.04 / 银河麒麟 V10中踩过的 5 个高频坑每一条都附带复现方式和根治方案。4.1 现象dockerd启动后立即退出journalctl -u docker显示levelerror msgfailed to start daemon: error initializing graphdriver: driver not supported原因overlay2存储驱动要求文件系统支持d_typetrue即目录项类型可识别而 XFS 格式化时未加-n ftype1参数或 ext4 文件系统未启用dir_index特性。Docker 24.0.5 默认禁用vfs驱动且aufs已彻底移除。解决检查当前/var/lib/docker所在文件系统df -T /var/lib/docker # 若为 xfs执行 xfs_info /var/lib/docker | grep ftype # 输出应为 ftype1若为 0则需重新格式化若无法重格强制改用vfs驱动仅限测试性能差sudo tee -a /etc/docker/daemon.json EOF storage-driver: vfs EOF sudo systemctl restart docker4.2 现象docker run hello-world报OCI runtime create failed: unable to retrieve OCI runtime errorjournalctl -u docker显示runc: symbol lookup error: runc: undefined symbol: seccomp_api_get_current原因runc二进制依赖libseccomp.so.2而离线系统如 CentOS 7.9自带libseccomp.so.2.2.1但runc编译时链接的是libseccomp.so.2.5.0符号不匹配。解决查看系统libseccomp版本rpm -qa | grep seccomp # CentOS/RHEL dpkg -l | grep seccomp # Ubuntu/Debian若版本 2.5.0不要升级系统库可能破坏其他软件而是下载runc官方预编译包匹配系统 glibc# 下载适配 CentOS 7 的 runcglibc 2.17 wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64 sudo install -m 755 runc.amd64 /usr/bin/runc4.3 现象docker info正常但docker build报failed to solve: rpc error: code Unknown desc failed to compute cache key: failed to walk /var/lib/docker/tmp/buildkit-mount*原因BuildKit 默认启用但离线环境缺少buildkitd二进制docker-24.0.5.tgz未打包buildkitd。Docker 24.x 将 BuildKit 设为默认但离线包只含dockerd和runc。解决禁用 BuildKit退回经典 builder# 方式一临时禁用当前 shell export DOCKER_BUILDKIT0 docker build . # 方式二全局禁用写入 daemon.json sudo tee -a /etc/docker/daemon.json EOF features: {buildkit: false} EOF sudo systemctl restart docker4.4 现象docker ps返回空但ps aux | grep dockerd显示进程在跑netstat -lnp | grep 2375无监听原因dockerd默认不监听 TCP 端口只通过 Unix Socket (/var/run/docker.sock) 通信。某些国产 OS 的dockerCLI 编译时硬编码了DOCKER_HOSTunix:///var/run/docker.sock但 socket 文件权限或 SELinux 上下文错误导致 CLI 无法访问。解决检查 socket 文件是否存在且权限正确ls -l /var/run/docker.sock # 应为srw-rw---- 1 root docker若权限不对修复sudo chown root:docker /var/run/docker.sock sudo chmod 660 /var/run/docker.sock若 SELinux 启用sestatus输出enabled执行sudo semanage fcontext -a -t container_var_run_t /var/run/docker\.sock sudo restorecon -v /var/run/docker.sock4.5 现象docker pull nginx卡住不动journalctl -u docker -f显示levelinfo msgtrying next host循环最终超时原因Docker 24.0.5 默认启用registry-mirrors自动发现尝试连接https://registry-1.docker.io/v2/失败后会轮询https://hub-mirror.c.163.com等国内镜像站但离线环境 DNS 不通导致每次请求都耗尽 30 秒超时。解决显式配置registry-mirrors为空数组强制直连离线环境本就不该联网sudo tee -a /etc/docker/daemon.json EOF registry-mirrors: [] EOF sudo systemctl restart docker5. 验证安装成果用四个真实命令覆盖 CLI、Daemon、Image、Container 全链路装完 Docker 不代表能用必须用生产级命令验证四层能力CLI 是否能发请求、Daemon 是否能响应、Image 是否能加载、Container 是否能运行。以下四个命令缺一不可每条都带预期输出和失败定位点。5.1 验证 CLI 与 Daemon 通信docker version是第一道门槛docker version预期输出关键字段字段正确值错误信号Client Version24.0.5显示20.10.x或command not foundServer Version24.0.5显示Error response from daemon...Server OSTypelinux显示windows说明装错平台包失败定位若报permission denied while trying to connect to the Docker daemon socket用户未加入docker组执行sudo usermod -aG docker $USER newgrp docker若报Cannot connect to the Docker daemon at unix:///var/run/docker.sock检查docker.sock是否存在、权限是否为660、SELinux 是否拦截。5.2 验证 Daemon 基础能力docker info暴露全部运行时细节docker info必查三项Storage DriverStorage Driver: overlay2→ 正确Storage Driver: vfs→ 性能警告Storage Driver: none→ 驱动未加载。Security Optionsseccomp和selinux行存在 → 安全机制启用若只有nameapparmorUbuntu或缺失seccomp→runc依赖库版本不匹配。Docker Root DirDocker Root Dir: /var/lib/docker→ 路径正确若为/var/lib/docker-24.0.5→daemon.json中># 有网机器执行 docker pull alpine:3.18 docker save alpine:3.18 alpine-3.18.tar拷贝alpine-3.18.tar到离线机器执行docker load alpine-3.18.tar # 输出应为Loaded image: alpine:3.18 docker images | grep alpine # 输出应为alpine 3.18 xxxxxxxx 2 weeks ago 3.29MB失败定位若报invalid formattar 包损坏用file alpine-3.18.tar检查是否为 POSIX tar若报no such imagedocker load命令语法错误必须用重定向不能用-i参数已废弃。5.4 验证 Container 运行能力docker run --rm -it是终极压力测试docker run --rm -it alpine:3.18 sh -c echo Hello from Docker 24.0.5 offline! uname -r预期输出Hello from Docker 24.0.5 offline! 5.4.0-150-generic # ← 内核版本证明容器内核隔离正常失败场景与根因现象根因修复命令docker: Error response from daemon: failed to create endpoint ... permission deniedSELinux 拒绝容器挂载sudo setsebool -P container_manage_cgroup onrpc error: code Unknown desc OCI runtime create failed: ... no such file or directoryrunc二进制缺失或路径错误ls -l /usr/bin/runc确认存在且可执行standard_init_linux.go:228: exec user process caused: no such file or directory容器内二进制依赖宿主机库如glibc版本不匹配改用scratch或alpine基础镜像避免 glibc 依赖从那以后我每次给客户部署离线 Docker都会强制走一遍这四个命令version→info→load→run少一个都不算交付。因为systemctl start docker成功只是进程起来了而docker run成功才是整个容器栈真正贯通。这套流程已在 17 台不同品牌、不同架构、不同国产 OS 的物理机上验证通过没有一次翻车。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑