离线环境安装Docker与docker-compose完整指南:从二进制包到systemd托管
简介这份资源面向需要在Linux环境下部署容器化应用的开发与运维人员提供Docker与Docker Compose的离线安装包解决内网或受限网络下无法直接拉取安装文件的问题。压缩包共4个文件包含tgz安装包、service系统服务文件、sh安装脚本以及docker-compose配置文件整体约84.53MB覆盖从引擎安装到服务注册、再到多容器编排的完整链路。其中tgz为Docker主程序包service用于配置开机自启sh脚本可简化安装流程docker-compose文件则便于一键编排多容器应用。资源已有266人学习下载适合刚接触容器技术、希望快速搭建本地或测试环境的开发者参考也可作为运维人员批量部署时的基础素材帮助减少手动配置环节提升环境搭建效率。1. 离线环境里装 Docker为什么我劝你手里常备一套安装包有些活是半夜来的。某次给一个内网机房做交付机器全是 CentOS 7网口不通外网yum 源指向的地址根本连不上而业务方要求第二天早上八点前把容器跑起来。那一刻你才会意识到yum install docker-ce这种平时敲得飞起的命令在断网环境里就是一行废纸。docker 和 docker-compose 安装包这类资源解决的正是这个场景把二进制、rpm 包、依赖和 compose 可执行文件提前攒在手里到了现场直接离线装不依赖任何在线源。这套东西适合谁一是经常做内网交付、等保环境、专网部署的运维和交付工程师二是需要在多台隔离机器上批量铺 Docker 的测试同学三是自己搭实验环境、又不想每次都被网络问题卡住的人。它不是什么高深技术本质就是「把在线安装的每一步换成离线可复现的每一步」。但恰恰是这种基础活翻车率最高——版本对不上、依赖缺一个、compose 和 docker 版本打架任何一个都能让你在机房干坐到天亮。下面我按「先搞懂装的是什么 → 怎么离线装 → 怎么验证 → 坑在哪」的顺序把整套流程拆开讲。2. 先分清三个东西docker engine、docker-compose、安装包形态很多人一上来就找「docker 安装包」但没想清楚自己要的到底是哪个组件、哪种格式。这一步没分清后面必然返工。2.1 docker engine 和 docker-compose 是两码事docker engine 是那个跑容器的守护进程核心是dockerd配套还有docker命令行客户端、containerd、runc这些组件。你平时敲的docker run、docker ps走的是客户端连守护进程。而 docker-compose 是一个独立的编排工具早期是 Python 写的v1后来用 Go 重写成了 v2命令也从docker-compose变成了docker compose注意中间是空格。两者版本是解耦的engine 装 20.10compose 装 v2.20 完全没问题但如果你拿一个很老的 compose v1 去配新 engine某些字段会不认。常见做法是engine 用官方仓库的 rpm/deb 包compose 单独下一个二进制文件扔到/usr/local/bin。这样两个东西可以各自升级互不牵连。2.2 安装包的三种形态选错就白下形态典型文件适用场景注意点二进制 tgzdocker-24.0.7.tgz任意 Linux解压即用需手动配 systemdrpm 包docker-ce-*.rpm等一组CentOS/RHEL/openEuler依赖多要一起下全deb 包docker-ce_*.deb等一组Ubuntu/Debian同样要凑齐依赖二进制 tgz 最省心解压出docker目录里面containerd、runc、dockerd全有拷到/usr/bin就能用缺点是 systemd 服务文件得自己写。rpm/deb 包的好处是能走系统包管理卸载干净坏处是依赖链长——docker-ce依赖containerd.io、docker-ce-cli、docker-buildx-plugin、docker-ce-rootless-extras少一个就装不上。所以离线场景我一般优先推荐二进制包除非对方明确要求走包管理。2.3 版本怎么选别追最新追「和系统内核匹配」docker 对内核有要求基本线是 3.10 以上但要用 overlay2 存储驱动建议 4.x 以上。CentOS 7 默认内核 3.10能用但偶尔有玄学问题。选版本时看两点一是 engine 版本别太新24.x 是当前比较稳的长期选择二是 compose 用 v2 系列v1 已经停止维护新项目别再用了。提示离线包里最好把 engine、compose、以及对应的 systemd 服务文件放同一个目录交付时一个压缩包搞定别东一个西一个。3. 离线安装实操从解压到 systemd 托管这一章是能直接抄作业的部分。假设你拿到的是一个包含二进制包和 compose 二进制的目录目标机器是 x86_64 的 Linux。3.1 二进制方式装 engine先把包传上去解压并铺开文件# 解压 docker 二进制包得到 docker/ 目录 tar -xzvf docker-24.0.7.tgz # 把可执行文件拷到系统路径 sudo cp docker/* /usr/bin/ # 确认关键组件都在 ls -l /usr/bin/dockerd /usr/bin/docker /usr/bin/containerd /usr/bin/runc逻辑说明docker-24.0.7.tgz解压后是一个docker目录里面平铺着所有二进制。cp docker/* /usr/bin/把它们一次性铺到系统 PATH 下。最后一步是自检四个文件缺任何一个后面dockerd都起不来。参数上没什么可调的路径固定即可。3.2 写 systemd 服务文件二进制方式没有自动注册服务得手写一个/usr/lib/systemd/system/docker.service[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s [Install] WantedBymulti-user.target逻辑说明Typenotify表示 dockerd 启动完会主动通知 systemd这是官方推荐写法。LimitNOFILEinfinity放开文件描述符限制容器多的时候不加这个会报 too many open files。Delegateyes让 docker 能自己管理 cgroup不加的话容器里再起 systemd 会出问题。这些参数不是可选项是踩过坑之后固定下来的。3.3 装 docker-compose 并验证compose v2 就是一个二进制文件改名放好即可# 放到用户级或系统级路径这里用系统级 sudo cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 启动 docker 并设为开机自启 sudo systemctl daemon-reload sudo systemctl enable --now docker # 验证两个组件 docker version docker-compose version逻辑说明compose 二进制必须加执行权限否则报 permission denied。daemon-reload是让 systemd 重新读服务文件改完 service 必须执行。enable --now一步完成开机自启和立即启动。验证时docker version要能看到 Client 和 Server 两段只有 Client 说明守护进程没起来docker-compose version输出 v2.x 才算对。3.4 用一个小 compose 文件跑通闭环装完不验证等于没装。写个最小docker-compose.ymlservices: web: image: nginx:alpine ports: - 8080:80 restart: unless-stopped# 后台拉起 docker-compose up -d # 看状态和日志 docker-compose ps docker-compose logs --tail20 # 收尾清理 docker-compose down逻辑说明services是 v2 的顶层键v1 里是versionservicesv2 可以省略 version。restart: unless-stopped表示除非手动停否则挂了自动重启。up -d后台启动ps看容器状态logs排查启动失败。能跑通这一套说明 engine 和 compose 都正常了。注意这里用的nginx:alpine镜像需要提前docker save成 tar 带到离线机器否则up会卡在拉镜像。4. 避坑与排查五个让我在机房熬夜的瞬间离线装 Docker 的坑大多不是技术难而是细节漏。下面五条都是真实翻过的车。4.1 现象dockerd 起不来日志报 iptables 相关错误原因系统装了 firewalld 或 iptables 规则冲突docker 默认要自己管 iptables 链被占用就起不来。 解决先systemctl stop firewalld systemctl disable firewalld或者给 dockerd 加--iptablesfalse参数但这样容器网络要自己配。生产环境更稳的做法是保留 firewalld在 docker.service 的After里加上 firewalld.service让启动顺序正确。4.2 现象docker-compose 命令找不到或提示 command not found原因二进制没加执行权限或者放到了不在 PATH 的目录。 解决chmod x是必须的放/usr/local/bin一般都在 PATH 里如果还找不到echo $PATH确认一下必要时软链到/usr/bin。4.3 现象compose up 卡在 pulling image最后超时原因离线机器没有镜像compose 默认会去拉。 解决在有网机器上docker save nginx:alpine -o nginx.tar拷到离线机docker load -i nginx.tar再up。或者 compose 文件里写image时确保本地已有。这是离线场景最高频的坑没有之一。4.4 现象容器起来了但访问不了映射端口原因宿主机防火墙没放行或者net.ipv4.ip_forward没开。 解决sysctl net.ipv4.ip_forward看是不是 1不是就sysctl -w net.ipv4.ip_forward1并写进/etc/sysctl.conf。防火墙侧firewall-cmd --add-port8080/tcp --permanent firewall-cmd --reload。4.5 现象卸载重装后旧配置残留新版本行为诡异原因/var/lib/docker和/etc/docker没清干净旧数据和新版本打架。 解决彻底卸载时systemctl stop docker然后删/var/lib/docker、/etc/docker、/usr/bin/docker*、/usr/bin/containerd*再重装。别嫌麻烦残留数据是黑匣子出问题最难查。注意每次离线交付前我都会在一台干净的虚拟机上把整套流程走一遍确认无误再上真机。这个习惯救过我不止一次。5. 进阶技巧把安装包做成可复用的离线交付包装一次是本事能反复装、快速装才是效率。我现在的做法是把 engine 二进制、compose 二进制、systemd 服务文件、一个install.sh脚本、以及几个常用镜像的 tar 包全部塞进一个目录打成压缩包。到现场解压跑一个脚本五分钟内环境就绪。脚本核心逻辑是这样#!/bin/bash set -e # 任何一步失败立即退出避免半装状态 # 1. 铺二进制 cp docker/* /usr/bin/ cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose chmod x /usr/local/bin/docker-compose # 2. 装服务文件 cp docker.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl enable --now docker # 3. 加载预置镜像 for img in images/*.tar; do docker load -i $img done # 4. 自检 docker version docker-compose version echo 环境就绪逻辑说明set -e是关键任何一步失败脚本立刻停不会出现「二进制拷了一半、服务没注册」的中间态。镜像预加载放在服务启动之后因为docker load需要守护进程在跑。最后的自检输出「环境就绪」是给交付验收看的一眼就知道成没成。验证方法上我一般会额外跑一个docker run --rm hello-world这个镜像小、启动快能同时验证 engine、镜像加载、容器运行三层。如果 hello-world 都跑不起来别急着上业务先回头查。从那以后我每次做离线交付都会强制走一遍「干净虚拟机全流程 hello-world 验证」确认无误才碰真机。这套安装包本身不复杂值钱的是那份「提前想到所有断网场景」的准备。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

机器视觉运动控制一体机在供料单元在线检测中的方案设计与实操

机器视觉运动控制一体机在供料单元在线检测中的方案设计与实操

1. 供料单元在线检测到底在解决什么问题供料单元是自动化产线上最不起眼、但最容易出事的环节。它负责把散装或整列来料,按节拍、按姿态送到下一道工序。听起来简单,可一旦料道上出现空位、叠料、卡料或者混入异物,后面的机械手抓空、装配错位…

2026/10/13 20:41:46 阅读更多 →
VB.NET手搓VSOP87D行星历表:从系数表到高精度星历计算

VB.NET手搓VSOP87D行星历表:从系数表到高精度星历计算

1. 天文历算项目的整体设计思路1.1 为什么要在.NET环境里手搓行星历表VSOP87是行星理论发展史上一个绕不开的里程碑。它本质上是一套用周期项级数逼近行星日心黄道坐标的分析理论,把水星到海王星这八颗行星的长期运动拆成了成千上万条正弦、余弦项。VSOP87D是其中一…

2026/10/14 2:00:17 阅读更多 →
YUV420p转YUV444p:从色度采样到相位对齐的完整解析

YUV420p转YUV444p:从色度采样到相位对齐的完整解析

1. 从一次颜色失真排查说起:为什么YUV420p转YUV444p不是"格式转换"这么简单前阵子帮一个做视频处理工具的朋友排查一个诡异的问题:同一段素材,在预览窗口里看肤色自然、边缘干净,可一旦导出成逐像素处理的中间格式&…

2026/10/12 19:01:44 阅读更多 →

最新新闻

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

简介:面向 YOLOv11 模型验证需求,这份精简版鸟类目标检测数据集包含一张真实野外鸟类图像及配套标准标注,可用于快速原型验证、轻量级部署测试与小样本检测基线建立。压缩包共五个文件,包含三张 JPG 图像、一个数据配置文件与一个…

2026/10/14 3:39:38 阅读更多 →
ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

简介:一套基于ASP.NET与SQL Server的葡萄酒网上商城销售系统,面向ASP.NET WebForm学习者、毕业设计学生以及需要搭建在线商城教学演示的开发者。系统围绕普通会员、商户会员和管理员三类角色展开,覆盖商品管理、购物车、订单处理、发货、商户…

2026/10/14 3:39:38 阅读更多 →
LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

简介:这是一份LangChain入门与实践的项目代码包,面向正在学习大模型应用开发的Python开发者,旨在帮助读者快速理解LangChain的模块化设计与核心用法。包内共3个文件,包含一个HTML格式的入门讲解页、一个项目运行配置文件以及一个版…

2026/10/14 3:39:38 阅读更多 →
C++学习日记 Day21:C++11(下)lambda表达式和function包装器

C++学习日记 Day21:C++11(下)lambda表达式和function包装器

## 今天学了什么今天学习C11的lambda表达式和function包装器。## 可调用对象概念:在C中有一类对象可像函数一样调用;分类:①函数指针using prt void(*)(int, string); prt f1 fun; f1(1, "函数指针");②仿函数 --有 operator&am…

2026/10/14 3:39:38 阅读更多 →
一人公司AI工作流:6步实现内容生产去体力化

一人公司AI工作流:6步实现内容生产去体力化

1. 一人公司的内容困局与破局思路一个人做内容,最怕的不是没灵感,而是灵感来了却卡在“执行”上。写一篇长文要三小时,做一张配图要半小时,剪一条短视频要一整个下午,排版发布又要来回切换四五个平台。一天下来&#x…

2026/10/14 3:39:38 阅读更多 →
8765平台前后摄DVDD电压不一致排查与修复指南

8765平台前后摄DVDD电压不一致排查与修复指南

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

2026/10/14 3:38:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →