离线环境安装Docker与Docker Compose:安装包选型、脚本部署与避坑指南
简介这份资源面向需要在Linux环境下部署容器化应用的开发与运维人员提供Docker与Docker Compose的离线安装包解决内网或受限网络下无法直接拉取安装文件的问题。压缩包共4个文件包含tgz安装包、service系统服务文件、sh安装脚本以及docker-compose配置文件整体约84.53MB覆盖从引擎安装到服务注册、再到多容器编排的完整链路。其中安装脚本可简化部署流程service文件便于将Docker注册为系统服务docker-compose配置则用于定义和运行多容器应用。资源已有266人学习下载适合刚接触容器技术、需要快速搭建本地或测试环境的初中级开发者参考也可作为运维人员批量部署时的基础素材帮助减少手动配置环节提升环境搭建效率。1. 离线环境里docker和docker-compose安装包到底该怎么备很多团队第一次在内网或隔离网段部署服务时都会卡在同一个地方机器上没有任何外网出口yum install docker-ce或apt-get install docker-compose-plugin全部超时而项目又要求用容器跑起来。这时候真正需要的不是一条安装命令而是一套完整的 docker 和 docker-compose 安装包组合Docker Engine 的静态二进制或离线 rpm/deb 包、containerd、runc、docker-compose 的可执行文件以及 systemd 服务单元。这套东西准备对了十分钟能装完准备错了会在依赖、版本、架构上反复翻车。这篇笔记面向需要在离线或半离线环境落地容器的运维和开发把选包、装包、验证、排错整条链路讲清楚让你照着就能复现。2. 先分清三种安装包形态静态二进制、rpm/deb、compose 单文件2.1 静态二进制包跨发行版最省心的选择Docker 官方提供了一组静态编译的二进制压缩包命名形如docker-version.tgz解压后得到docker、dockerd、containerd、containerd-shim-runc-v2、ctr、runc、docker-proxy等可执行文件。它的最大好处是不依赖发行版的包管理系统CentOS、Ubuntu、Debian、openEuler 都能用同一套包只要内核版本够一般要求 3.10 以上推荐 4.x 以上并且 cgroup、overlay2 这些内核特性可用。我一般会这样组织离线目录# 离线包目录结构示例 docker-offline/ ├── docker-27.3.1.tgz # Docker Engine 静态二进制包 ├── docker-compose-linux-x86_64 # compose 单文件可执行程序 ├── containerd.service # 可选独立 containerd 的 systemd 单元 ├── docker.service # dockerd 的 systemd 单元 └── install.sh # 一键安装脚本解压和安装的核心动作只有几步# 1. 解压静态包 tar -xzvf docker-27.3.1.tgz # 2. 把二进制文件复制到系统路径 sudo cp docker/* /usr/bin/ # 3. 复制 systemd 服务单元 sudo cp docker.service /etc/systemd/system/ sudo cp containerd.service /etc/systemd/system/ 2/dev/null || true # 4. 重载并启动 sudo systemctl daemon-reload sudo systemctl enable --now docker逻辑说明静态包解压出来的docker/*里既有客户端也有服务端全部丢进/usr/bin/是最省事的做法。docker.service里默认的ExecStart指向/usr/bin/dockerd所以路径必须对得上。参数上--now等价于enable加start省一步操作。如果目标机器用的是 cgroup v2docker.service里可能需要显式加--exec-opt native.cgroupdriversystemd否则 kubelet 对接时会报驱动不一致。2.2 rpm/deb 包适合有本地源的环境如果内网已经有一套 yum 或 apt 的本地仓库用 rpm/deb 包会更规范升级和卸载都能走包管理器。需要准备的包不止一个常见依赖链是包名作用是否必须containerd.io容器运行时必须docker-ceDocker 引擎主体必须docker-ce-cli命令行客户端必须docker-buildx-plugin构建扩展按需docker-compose-plugincompose v2 插件按需离线下载时用yumdownloader --resolve或apt-get install --download-only把依赖一并拉下来否则装到一半会提示缺libcgroup、container-selinux之类。装的时候用rpm -ivh *.rpm或dpkg -i *.deb如果顺序不对导致依赖报错再补yum localinstall或apt-get -f install收尾。2.3 docker-compose 单文件别和 compose plugin 搞混docker-compose 有两个世代v1 是 Python 写的docker-compose单文件v2 是 Go 写的既可以作为docker compose插件也可以单独下载docker-compose-linux-x86_64当独立命令用。离线环境里最稳的是直接放一个 v2 单文件# 放到 PATH 并赋可执行权限 sudo cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 验证 docker-compose version参数说明文件名里的x86_64是架构标识ARM 机器要换成aarch64版本拿错了会直接报cannot execute binary file。如果你希望用docker compose这种子命令形式就把文件放到/usr/libexec/docker/cli-plugins/docker-compose或~/.docker/cli-plugins/docker-composeDocker CLI 会自动识别。两种方式不冲突但别只放一半否则会出现docker-compose: command not found而docker compose又能用的迷惑现象。3. 用脚本把安装包串起来一份可复现的离线安装流程3.1 安装前的环境自检在动手之前先确认内核和存储驱动这一步能省掉后面一半的排错时间# 查看内核版本 uname -r # 查看 cgroup 版本 stat -fc %T /sys/fs/cgroup/ # 查看是否已加载 overlay 模块 lsmod | grep overlay # 查看 SELinux 状态 getenforce逻辑说明stat -fc %T /sys/fs/cgroup/返回cgroup2fs说明是 cgroup v2返回tmpfs说明是 v1。overlay2 存储驱动依赖overlay内核模块没加载就modprobe overlay。SELinux 如果是 Enforcingrpm 安装时可能因为container-selinux缺失而失败离线环境要么提前装好这个包要么临时设为 Permissive 验证。3.2 一键安装脚本的写法把前面的步骤收进一个脚本方便在多台机器上重复执行#!/bin/bash set -euo pipefail PKG_DIR/opt/docker-offline DOCKER_TGZdocker-27.3.1.tgz COMPOSE_BINdocker-compose-linux-x86_64 # 1. 解压 Docker 静态包 tar -xzf ${PKG_DIR}/${DOCKER_TGZ} -C ${PKG_DIR} # 2. 安装二进制 install -m 0755 ${PKG_DIR}/docker/* /usr/bin/ # 3. 安装 compose install -m 0755 ${PKG_DIR}/${COMPOSE_BIN} /usr/local/bin/docker-compose # 4. 安装 systemd 单元 install -m 0644 ${PKG_DIR}/docker.service /etc/systemd/system/docker.service # 5. 启动 systemctl daemon-reload systemctl enable --now docker # 6. 验证 docker version docker-compose version逻辑说明set -euo pipefail让脚本在任何一步失败时立即退出避免半装状态。install -m 0755比cp更明确地设置权限省掉单独的chmod。docker.service的权限用 0644systemd 单元不需要可执行位。最后两步验证必须保留装完不验证等于没装。3.3 验证安装是否真的可用装完不代表能用跑一个最小容器才算数# 拉取镜像在离线环境会失败改用本地导入 docker load -i /opt/docker-offline/images/busybox.tar # 运行测试容器 docker run --rm busybox echo docker ok # 测试 compose cat /tmp/docker-compose-test.yml EOF services: demo: image: busybox command: echo compose ok EOF docker-compose -f /tmp/docker-compose-test.yml up参数说明离线环境没有 registry镜像必须提前docker save成 tar 再docker load。--rm让容器退出后自动清理避免留下垃圾容器。compose 文件里用services顶层键是 v2 语法v1 用的是version加services写错了会提示格式不兼容。4. 避坑与排查离线装 Docker 最容易翻车的五个点4.1 现象dockerd 启动失败日志报failed to start daemon: error initializing graphdriver原因存储驱动不匹配。目标机器可能用的是 devicemapper 或 btrfs而默认配置期望 overlay2。解决编辑/etc/docker/daemon.json显式指定{storage-driver: overlay2}确认overlay模块已加载后重启。如果文件系统本身不支持 overlay2比如某些老内核的 ext4 未开d_type只能退回vfs但性能会明显下降。4.2 现象docker-compose执行报Permission denied或cannot execute binary file原因前者是没加可执行权限后者是架构拿错了。解决chmod x解决权限uname -m确认架构x86_64 对应x86_64包ARM64 对应aarch64包。别用file docker-compose看到ELF 64-bit就以为对了还要看后面的x86-64还是ARM aarch64。4.3 现象容器内 DNS 解析失败ping域名不通原因离线环境没有外部 DNS容器默认继承宿主机的/etc/resolv.conf如果宿主机配的是不可达的 DNS容器里就解析不了。解决在daemon.json里加{dns: [10.0.0.2]}指向内网 DNS或者启动容器时用--dns指定。compose 里则在 service 下加dns字段。4.4 现象docker load导入镜像后docker images看不到原因导入的 tar 包可能是docker save时只保存了某一层或者 tar 包本身损坏。解决用docker load -i xxx.tar时观察输出正常会打印Loaded image: xxx:tag。如果只打印Loaded image ID说明镜像没有 tag需要手动docker tag。另外确认 tar 包是用docker save而不是docker export生成的后者导出的文件系统不能直接 load。4.5 现象systemd 启动 docker 超时Job for docker.service timed out原因dockerd 启动时卡在某个环节常见的是 iptables 规则初始化慢或 containerd 没起来。解决先systemctl status docker看详细日志再journalctl -u docker -n 100翻最近记录。如果是 containerd 问题确认/var/run/containerd/containerd.sock存在如果是 iptables检查iptables -L是否能正常执行必要时在daemon.json里加{iptables: false}临时绕过但会失去端口映射能力仅用于排查。5. 把安装包做成可复用资产版本锁定与校验5.1 版本锁定别让「最新版」坑了你离线安装包最忌讳的就是每次去下最新版。Docker 的版本迭代快不同版本对内核、cgroup、存储驱动的要求不一样今天能装的包明天可能就报新错。我的习惯是锁定一个经过验证的版本组合比如 Docker Engine 27.x 配 compose v2.29.x把版本号写进脚本变量所有机器统一用同一套包。升级时先在测试机验证再整体替换。# 版本锁定示例 DOCKER_VERSION27.3.1 COMPOSE_VERSIONv2.29.7 DOCKER_TGZdocker-${DOCKER_VERSION}.tgz COMPOSE_BINdocker-compose-linux-x86_64参数说明把版本号抽成变量脚本里所有引用都走变量替换时只改一处。compose 的版本号带v前缀下载文件名里通常也带注意别漏。5.2 校验sha256 是离线包的后悔药离线包在拷贝、传输过程中可能损坏装到一半报gzip: stdin: unexpected end of file就是典型症状。提前算好 sha256 并随包分发# 生成校验文件 sha256sum docker-27.3.1.tgz docker-compose-linux-x86_64 SHA256SUMS # 安装前校验 sha256sum -c SHA256SUMS逻辑说明sha256sum -c会逐行比对全部 OK 才继续。这一步在跨网段拷贝后尤其重要U 盘、scp、内网文件服务器都可能引入损坏。校验失败就重新拷贝别硬装。5.3 一个我踩过的坑compose 文件里的version字段compose v2 已经废弃了顶层version字段但很多老教程还在写version: 3.8。写了不会报错但会打印一条 warning而且在某些严格模式下会被忽略。我现在的习惯是直接不写version从services开始。另外docker-compose和docker compose对同一个文件的解析行为基本一致但插件形式对name字段支持更好独立二进制在某些老版本上会忽略项目名导致容器名前缀不对。离线环境里如果同时装了两种建议统一用其中一种别混着调。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Excel VBA文本框控件深度解析:从基础属性到实战交互

Excel VBA文本框控件深度解析:从基础属性到实战交互

1. 为什么文本框值得单独拎出来讲做过Excel自动化的人都有一个共识:控件才是把死表格变成活工具的分水岭。而文本框,是所有控件里出场率最高、也最容易被低估的一个。很多人第一次接触VBA控件,就是从窗体上拖一个文本框开始的——看起来简单&…

2026/10/12 22:45:37 阅读更多 →
从代号到交付:模糊需求项目的澄清、裁剪与里程碑推进指南

从代号到交付:模糊需求项目的澄清、裁剪与里程碑推进指南

如果你接手过一个名字叫“rea”的项目,大概能体会那种微妙的不安:没有需求文档,没有原型,没有验收标准,唯一确定的是这个代号会在代码仓库里活很久。“rea”可以是某个业务线的缩写,可以是某个框架的名字&a…

2026/10/12 22:45:37 阅读更多 →
从“rea”到可落地方案:模糊项目标题的补全方法论

从“rea”到可落地方案:模糊项目标题的补全方法论

前一阵帮同事做项目梳理,拿到一张项目汇总表,其他栏目后面都跟着一两行注释、负责人、里程碑,唯独有一行格外刺眼:标题栏只写了三个字母“rea”,正文空白、关键词空白、摘要空白。我盯着这几个字母看了老半天&#xff…

2026/10/12 22:45:37 阅读更多 →

最新新闻

SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0学生信息管理系统实战

SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0学生信息管理系统实战

接手过一个学生信息管理系统的小项目,技术栈正好是SpringBoot2 Vue3 MyBatis-Plus MySQL8.0,标题里这套组合一眼看去很常见,但真正从零落地的时候,细节远比想象中多。当初团队里有人建议用老掉牙的JSP那套,也有人建…

2026/10/13 2:34:32 阅读更多 →
SpringBoot+Vue私房菜定制上门服务系统开发实战解析

SpringBoot+Vue私房菜定制上门服务系统开发实战解析

一个 SpringBoot Vue 的私房菜定制上门服务系统,光看标题可能觉得就是一个普通的管理系统,但真正动手做过的人会知道,这类“定制 上门 多角色”的业务模型,远比表面看起来复杂。它不是简单的 CRUD 堆砌,订单状态的流…

2026/10/13 2:34:32 阅读更多 →
ModernZ键盘快捷键绑定教程:input.conf中script-binding与script-message完全指南

ModernZ键盘快捷键绑定教程:input.conf中script-binding与script-message完全指南

音视频UI组件 【免费下载链接】ModernZ A sleek and modern OSC for mpv. This project is a fork of ModernX that enhances functionality by adding more features while preserving the core standards of mpvs OSC. 项目地址: https://gitcode.com/gh_mirrors/…

2026/10/13 2:34:32 阅读更多 →
数据结构第一章重难点全梳理:逻辑结构、存储结构与复杂度分析

数据结构第一章重难点全梳理:逻辑结构、存储结构与复杂度分析

很多人在学一门新课程时,最容易忽略的偏偏是第一张。第一张通常看起来“全是概念、没有代码”,感觉像是空话,于是翻两页就过去了,等后面真正写程序、做算法题时才发现什么都对不上。这次我把自己重新整理的《数据结构》第一章笔记…

2026/10/13 2:34:32 阅读更多 →
修仙AI小镇xianxia-AI-town:大模型驱动的修仙模拟器,NPC与玩家为何能平权?完整解读

修仙AI小镇xianxia-AI-town:大模型驱动的修仙模拟器,NPC与玩家为何能平权?完整解读

【免费下载链接】xianxia-AI-town-AI- 大模型驱动的npc决策,npc和玩家平权 项目地址: https://gitcode.com/gh_mirrors/xi/xianxia-AI-town-AI- 点击查看 免费下载 修仙AI小镇(xianxia-AI-town)是一款大模型驱动的修仙模拟游戏&a…

2026/10/13 2:34:32 阅读更多 →
SpringBoot+Vue学生成绩分析与可视化平台全解析

SpringBoot+Vue学生成绩分析与可视化平台全解析

每年毕业季我都能在技术社区里看到大量和“成绩管理系统”相关的提问,这个题目属于那种“看起来老套、实则非常能打”的典型选题。特别是把Java、Vue、SpringBoot这三个词绑在一起的时候,它考查的已经不只是“会写增删改查”,而是完整的前后端…

2026/10/13 2:33:32 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →