Docker与Docker Compose离线安装包:内网部署全指南
简介这份资源面向需要在Linux环境下部署容器化应用的开发与运维人员提供Docker与Docker Compose的离线安装包解决内网或受限网络下无法直接拉取安装文件的问题。压缩包共4个文件以tgz安装包、service系统服务文件、sh安装脚本和docker-compose配置文件为主整体约84.53MB覆盖从二进制安装到服务注册的完整环节适合具备基础Linux操作能力、希望快速搭建容器运行环境的读者。目前已有266人学习下载可作为测试与生产环境部署的参考。通过其中的安装脚本与服务配置读者可完成Docker引擎的安装与开机自启设置并借助Compose配置模板快速编排多容器应用减少手动逐个启动容器的重复工作同时理解容器化部署中环境一致性与可移植性的实现思路。1. Docker 与 Docker Compose 安装包为什么离线环境才是真正的分水岭很多人第一次接触容器是在一台能连外网的开发机上敲apt install docker-ce三分钟跑完觉得这事没什么门槛。真正让人翻车的场景是内网服务器、生产隔离区、客户现场那台连不上任何镜像源的机器——这时候你手里如果没有一份完整的 Docker 与 Docker Compose 安装包就只能干瞪眼。这个标题讲的正是这件事把 Docker Engine、Docker CLI、containerd、runc 以及 docker-compose 二进制这一整套东西做成可以拷贝、可以离线部署、可以版本对齐的安装包集合。它解决的不是「怎么学 Docker」而是「怎么在没有任何外网依赖的前提下把 Docker 和 Docker Compose 一次性装好、装对、装到能跑生产容器的程度」。适合谁适合要做内网交付的运维、要给客户部署私有化产品的后端、以及被公司网络策略卡住装不上 Docker Desktop 的 Windows 开发者。下面我按自己实际交付过的方式把选包、装包、验证、排错整条链路讲清楚。2. 先搞清楚要装哪几个包Docker Engine、CLI、Compose 的边界2.1 一套完整的 Docker 安装包到底包含哪些组件很多人以为「Docker 安装包」就是一个 docker 二进制这是最常见的误解。在 Linux 上一个能正常跑容器的 Docker 环境至少由四部分组成dockerd守护进程也就是 Docker Engine、dockerCLI 客户端、containerd真正管理容器生命周期的运行时、runc底层 OCI 运行时。此外还有docker-proxy、docker-init这些辅助二进制。如果你只把docker这个 CLI 拷过去敲任何命令都会报Cannot connect to the Docker daemon因为守护进程根本没起来。Docker Compose 则是另一条线。它早期是一个独立的 Python 程序docker-composev1后来重写成 Go 并作为 Docker CLI 的插件docker composev2。这两者的调用方式、安装位置、依赖完全不同选错了会在部署时踩坑。下面这张表是我整理的最小组件清单交付前对着核一遍组件二进制/包名作用是否必需Docker Enginedockerd守护进程接收 CLI 请求必需Docker CLIdocker命令行客户端必需containerdcontainerd、containerd-shim容器运行时管理必需runcrunc底层 OCI 运行时必需Compose v2docker-compose插件形式编排多容器按需Compose v1docker-compose独立二进制旧版编排按需2.2 离线安装包从哪来三种可靠获取方式第一种是官方静态二进制包。Docker 官方在download.docker.com提供了各版本的静态 tgz比如docker-27.3.1.tgz解压后docker/目录下就是全套二进制。这种方式最干净不依赖发行版包管理器适合跨发行版交付。第二种是发行版离线 deb/rpm 包。用apt-get install --download-only或yumdownloader --resolve把 docker-ce、docker-ce-cli、containerd.io、docker-compose-plugin 及其依赖全部下载到本地目录再拷到目标机dpkg -i或rpm -ivh。这种方式的好处是能自动处理依赖坏处是包和发行版版本强绑定Ubuntu 22.04 的包拿到 CentOS 上直接废。第三种是内网自建仓库。如果交付机器多我会在内网搭一个 apt/yum 源把包放进去目标机改一下源地址就能装。这是长期方案单次交付用前两种就够。提示无论哪种方式务必记录每个包的版本号。Docker Engine 和 containerd 的版本有兼容矩阵混装容易出现守护进程起不来的玄学问题。2.3 版本对齐为什么 dockerd 和 containerd 不能随便配Docker Engine 对 containerd 有最低版本要求。比如较新的 Engine 需要 containerd 1.6 以上如果你从旧机器拷了个 containerd 1.4 过去dockerd启动时会报failed to start containerd或者干脆静默退出。我的习惯是静态二进制包整套一起下绝不混用不同来源的组件。用docker version和containerd --version分别确认两边版本都在官方兼容范围内再往下走。3. Linux 离线安装实操从解压到 systemd 托管3.1 用静态二进制包安装 Docker Engine假设你已经把docker-27.3.1.tgz拷到了目标机/opt目录。下面是我常用的安装脚本逐条执行即可# 解压静态包得到 docker/ 目录内含全部二进制 tar -xzvf /opt/docker-27.3.1.tgz -C /opt # 把二进制拷到系统 PATH注意是 docker/* 全部拷过去 sudo cp /opt/docker/* /usr/bin/ # 确认关键二进制就位 ls -l /usr/bin/dockerd /usr/bin/docker /usr/bin/containerd /usr/bin/runc # 创建 docker 用户组避免每次 sudo sudo groupadd -f docker sudo usermod -aG docker $USER这段脚本的逻辑很直白解压、拷贝、验证、建组。参数上唯一要注意的是cp /opt/docker/*这个通配它会把dockerd、docker、containerd、runc、docker-proxy、docker-init一次性拷全比一个个指定省事也不容易漏。拷完后ls那一步是后悔药——如果某个二进制缺失后面启动必然失败不如提前发现。3.2 配置 systemd 让 dockerd 开机自启静态二进制不会自动生成 systemd unit需要手写。把下面内容存成/etc/systemd/system/docker.service[Unit] DescriptionDocker Application Container Engine Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd --hostunix:///var/run/docker.sock ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s [Install] WantedBymulti-user.targetTypenotify表示 systemd 会等 dockerd 通过 sd_notify 报告就绪比simple更可靠。LimitNOFILEinfinity是必须的容器多的时候文件描述符不够会直接导致创建容器失败。Delegateyes让 dockerd 能管理自己的 cgroup 子树。写完执行sudo systemctl daemon-reload sudo systemctl enable docker sudo systemctl start docker sudo systemctl status dockerstatus显示active (running)才算成功。如果卡在activating多半是 containerd 没起来或者 socket 权限问题看journalctl -u docker -n 50定位。3.3 安装 Docker Compose v2 插件Compose v2 是作为 CLI 插件存在的安装位置有讲究。它必须放在~/.docker/cli-plugins/或/usr/local/lib/docker/cli-plugins/下文件名必须是docker-composeDocker CLI 才能识别成docker compose子命令# 创建插件目录 sudo mkdir -p /usr/local/lib/docker/cli-plugins/ # 拷入 compose 二进制并加执行权限 sudo cp /opt/docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod x /usr/local/lib/docker/cli-plugins/docker-compose # 验证注意是 docker compose空格不是 docker-compose横杠 docker compose version这里有个高频翻车点很多人把二进制命名成docker-compose放进/usr/bin然后敲docker compose报unknown command。原因是 v2 插件机制只认cli-plugins目录下的docker-compose文件放在/usr/bin的会被当成 v1 独立命令。两种调用方式并存时docker-compose横杠走 v1docker compose空格走 v2别搞混。3.4 验证安装三个必须跑通的命令装完别急着上业务先跑这三条# 1. 看客户端和服务端版本是否都正常返回 docker version # 2. 跑一个最小容器验证运行时链路 docker run --rm hello-world # 3. 验证 compose 能解析文件 docker compose versiondocker version会分别打印 Client 和 Server 两段Server 段为空说明守护进程没连上。hello-world能跑通说明 containerd、runc、镜像拉取离线环境需要提前 load 镜像整条链路没问题。第三条确认 compose 插件被正确加载。这三条过了基础环境就算立住了。4. Windows 与内网场景Docker Desktop 和离线镜像的坑4.1 Windows 上装 Docker Desktop 绕不开的两个前置条件Windows 用户搜「docker desktop 安装教程」最多但真正卡住人的不是安装步骤而是两个前置检查。第一是虚拟化BIOS 里要开 VT-x/AMD-VWindows 功能里要启用 WSL2 或 Hyper-V。如果没开Docker Desktop 启动时会直接报virtualization support not detected或Docker Desktop failed to start because virtualisation support wasnt detected这时候装多少遍都没用得回 BIOS 改设置。第二是 WSL2 内核更新。即便开了虚拟化WSL2 内核太旧也会导致 Docker Desktop 起不来。离线环境下没法自动更新需要单独准备 WSL2 内核更新包wsl_update_x64.msi一并交付。我的交付清单里Windows 场景永远是三件套Docker Desktop 安装包、WSL2 内核更新包、以及一份 BIOS 开启虚拟化的图文说明。4.2 离线环境怎么把镜像也带过去Docker 装好了但docker pull拉不到镜像这是内网交付最典型的死结。解决办法是docker save和docker load配对使用。在有网的机器上# 把镜像导出成 tar多个镜像可以一起打 docker save -o /tmp/mysql-8.0.tar mysql:8.0 docker save -o /tmp/redis-7.tar redis:7 # 压缩一下镜像 tar 体积很大 gzip /tmp/mysql-8.0.tar拷到目标机后# 解压并导入 gunzip /tmp/mysql-8.0.tar.gz docker load -i /tmp/mysql-8.0.tar # 确认镜像已就位 docker images | grep mysqldocker save保留的是镜像的完整层和元数据docker load导入后镜像 ID 和原来一致这点比docker export/import强后者会丢历史层。参数上注意-o指定输出文件-i指定输入文件别写反。镜像 tar 动辄几个 G交付前一定 gzip 压缩能省一半以上体积。4.3 用 docker compose 部署一个真实服务验证全链路光跑 hello-world 不够我一般会用一个真实 compose 文件验证。下面这个部署 MySQL 8.0 的例子是内网交付里最常被拿来试的services: mysql: image: mysql:8.0 container_name: mysql8 restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ChangeMe_2024 MYSQL_DATABASE: appdb ports: - 3306:3306 volumes: - ./data:/var/lib/mysql - ./conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro command: - --character-set-serverutf8mb4 - --collation-serverutf8mb4_unicode_cirestart: unless-stopped保证宿主机重启后容器自动拉起。volumes把数据和配置挂到宿主机容器删了数据还在。command覆盖默认启动参数把字符集设成 utf8mb4避免中文乱码。启动用docker compose up -d看日志用docker compose logs -f mysql。如果容器起来又立刻退出九成是my.cnf路径挂载错了或者权限不对docker compose logs里会有明确报错。5. 避坑与排查安装包交付里最容易翻车的五件事5.1 现象docker compose 报 libz.so.1 加载失败现象是执行docker-compose时提示error while loading shared libraries: libz.so.1: cannot open shared object file。原因是这个二进制是动态链接的目标机缺少 zlib 运行库。解决方式是装zlibapt install zlib1g或yum install zlib或者干脆换成静态编译的 Compose v2 二进制后者不依赖系统库这也是我推荐 v2 的原因之一。5.2 现象dockerd 启动后立刻退出日志无有效信息现象是systemctl start docker后状态反复在 activating 和 failed 之间跳。原因通常是 containerd 没起来或者/var/run/docker.sock残留了旧 socket 文件。解决是先systemctl status containerd确认运行时正常再rm -f /var/run/docker.sock清掉残留然后重启 docker。如果还不行手动前台跑dockerd --debug看实时输出比看 journal 直观。5.3 现象容器内访问不了外网docker 网络不通现象是容器里ping不通外网或者宿主机访问不了容器端口。原因是宿主机net.ipv4.ip_forward没开或者 firewalld/iptables 规则把 Docker 网桥流量拦了。解决是sysctl -w net.ipv4.ip_forward1并写进/etc/sysctl.conf持久化然后确认firewalld没有误杀docker0网桥。内网环境还要检查是不是有安全组策略挡了转发。5.4 现象离线导入镜像后 docker images 看不到现象是docker load -i显示成功但docker images里找不到。原因是导入的镜像没有 tag只有一个none:none的悬空镜像。解决是用docker tag IMAGE_ID mysql:8.0手动打标签。根因是docker save时如果镜像本身就没 tag导出的 tar 里也不带 tag所以导出前先docker tag规范命名。5.5 现象Windows 上 Docker Desktop 装了但 WSL2 后端起不来现象是 Docker Desktop 界面一直转圈提示 WSL2 相关错误。原因是 WSL2 内核版本过低或 WSL 功能没启用。解决是先在 PowerShell 里wsl --update有网时离线则手动安装wsl_update_x64.msi再wsl --set-default-version 2把默认版本设为 2。如果还不行检查 Windows 功能里「虚拟机平台」和「适用于 Linux 的 Windows 子系统」两项是否都勾选。6. 把安装包做成可复用交付物版本锁定与自检脚本单次装完不算本事能把这套东西沉淀成可复用的交付物才是。我的做法是建一个目录把所有安装包、镜像 tar、compose 文件、以及一个自检脚本放一起交付时整包拷过去。自检脚本长这样#!/bin/bash # docker-env-check.sh 交付环境自检 set -e echo [1/5] 检查 docker 二进制 command -v docker /dev/null || { echo docker 未安装; exit 1; } echo [2/5] 检查守护进程 docker info /dev/null 21 || { echo dockerd 未运行; exit 1; } echo [3/5] 检查 compose 插件 docker compose version /dev/null 21 || { echo compose 插件缺失; exit 1; } echo [4/5] 检查 ip_forward [ $(cat /proc/sys/net/ipv4/ip_forward) 1 ] || echo 警告: ip_forward 未开启 echo [5/5] 检查关键镜像 docker images --format {{.Repository}}:{{.Tag}} | grep -q mysql || echo 警告: mysql 镜像未导入 echo 自检完成这个脚本的价值在于把「装完到底能不能用」变成一条命令的确定答案。set -e让任何一步失败就退出避免误判。前三条是硬性检查失败直接退出后两条是警告因为 ip_forward 和镜像可以后续补。交付时让现场人员先跑这个脚本比电话里一步步问「你敲一下 docker version 看看」高效得多。版本锁定上我习惯在目录里放一个VERSIONS.txt记录 Engine、containerd、Compose 的确切版本号以及每个镜像的 digest。下次交付直接照抄不重新选版本。血泪经验是不要追最新版用上一个稳定大版本社区踩过的坑多出问题搜得到答案。我自己就吃过追新版结果 containerd 和 Engine 不兼容、折腾一下午的亏。最后一个习惯所有安装包和镜像 tar 都算一遍 sha256写进清单。拷贝过程中文件损坏是内网交付的隐形杀手sha256sum -c一跑就知道比装到一半报错再回头查省事得多。这套流程我用了几年从单机到几十台的内网集群都跑得通希望帮到你。本文还有配套的精品资源点击获取

相关新闻

汽车CAN总线逆向为何选第三方?七个理由与实操建议

汽车CAN总线逆向为何选第三方?七个理由与实操建议

/* 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 11:57:46 阅读更多 →
基于Spark的电影推荐系统实战:ALS协同过滤与参数调优指南

基于Spark的电影推荐系统实战:ALS协同过滤与参数调优指南

简介:面向大数据相关专业毕业设计、推荐系统入门开发者的一份完整设计资料,以基于Spark的电影推荐系统为主线,覆盖人口统计学、内容推荐与协同过滤三类算法,并给出从需求分析、系统设计到功能实现、测试验证的完整研究框架。资源包…

2026/10/13 11:56:45 阅读更多 →
M601 Cat.1模块软件资源全解析:从AT指令到OpenCPU开发实践

M601 Cat.1模块软件资源全解析:从AT指令到OpenCPU开发实践

拿到一块M601 Cat.1模块,干硬件的人第一反应是查引脚、看参考设计、量电平,但真正让项目跑起来的,往往是软件资源能不能跟上。从AT指令到固件烧录,从SDK到调试输出,软件资源的完整度直接决定你从“板子能亮”到“业务上…

2026/10/13 11:56:45 阅读更多 →

最新新闻

打破园区数据孤岛:统一数字平台与智慧园区落地实践

打破园区数据孤岛:统一数字平台与智慧园区落地实践

简介:面向园区管理者、物业运营方与智慧城市方案设计人员,这份《华为智慧园区通用场景解决方案》以“平台生态”为主线,针对管理对象多、运营成本高、服务体验差、应用重复建设等痛点,给出分层分场景的数字化转型路径,…

2026/10/13 12:41:45 阅读更多 →
Elasticsearch集群搭建实战:节点角色、核心配置与健康检查

Elasticsearch集群搭建实战:节点角色、核心配置与健康检查

1. 先搞明白:这个集群到底要解决什么问题我最初接触ELK的时候,对Elasticsearch集群的理解特别肤浅:以为把ES多装几台,启动起来就算集群了。结果在测试环境里把三台机器都配成了默认角色,数据全挤在一台机器的磁盘上&am…

2026/10/13 12:41:45 阅读更多 →
Java Word占位符替换:Apache POI与docx4j选型及跨run处理避坑指南

Java Word占位符替换:Apache POI与docx4j选型及跨run处理避坑指南

1. 为什么“替换Word占位符”这件事,远比想象中麻烦做过Java后端的人,几乎都绕不开一个需求:生成一份格式规范的Word文档。合同、通知书、报表、简历、项目验收单,业务方给过来的永远是一个排版精美的.docx模板,里面写…

2026/10/13 12:41:45 阅读更多 →
SAP-PP替代物料完全手册:策略、配置与MRP消耗顺序避坑指南

SAP-PP替代物料完全手册:策略、配置与MRP消耗顺序避坑指南

简介:这份手册面向SAP-PP模块顾问、生产计划员及物料管理相关人员,系统讲解替代物料与后继物料的配置逻辑与实操方法,帮助解决生产过程中物料短缺、切换与按比例消耗等常见难题。资源包内含1个docx文档,大小约871KB,以…

2026/10/13 12:41:45 阅读更多 →
测试工程师面试题:底层能力分析与高效准备指南

测试工程师面试题:底层能力分析与高效准备指南

如果把测试工程师的面试题当成一份题库来背,基本就输了一半。这几年我接触过不少准备面试的朋友,也看过很多测试工程师/测试开发岗位的面试题合集,大家普遍的做法是刷题、背答案、记八股,结果面试官换一种问法,立刻就原…

2026/10/13 12:41:45 阅读更多 →
鲲鹏云ARM架构Hadoop集群部署实验全流程拆解

鲲鹏云ARM架构Hadoop集群部署实验全流程拆解

简介:《鲲鹏云大数据实验docx》是一份面向云计算与大数据初学者的实验报告,完整记录了在华为云鲲鹏环境下从零搭建Hadoop集群的全过程。报告从购买弹性云服务器与对象存储服务开始,介绍如何获取AK/SK认证密钥,并逐步完成OpenJDK安…

2026/10/13 12:40:44 阅读更多 →

日新闻

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

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

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

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/13 2:54:56 阅读更多 →
影刀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 阅读更多 →