尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Docker与Docker Compose离线安装包部署指南:内网环境实战

发布时间:2026/9/29 14:11:50

资讯中心
01
ARTICLE

Docker与Docker Compose离线安装包部署指南:内网环境实战

Docker与Docker Compose离线安装包部署指南:内网环境实战
简介这份资源面向需要在Linux服务器上快速搭建容器环境的开发与运维人员提供Docker与Docker Compose的离线安装包解决内网或受限网络下无法直接拉取安装文件的问题。压缩包共4个文件包含tgz安装包、service系统服务文件、sh安装脚本以及docker-compose配置文件整体约84.53MB覆盖从引擎安装到服务注册、再到多容器编排的完整链路。目前已有265人学习下载适合刚接触容器技术或需要批量部署环境的读者参考。通过其中的安装脚本与服务配置读者可以省去逐条查找依赖和手动配置systemd的步骤快速完成Docker引擎的部署docker-compose文件则便于理解多容器应用的定义方式为后续编排实践打下基础。整体结构精简适合作为容器环境搭建的起步素材。1. 为什么我建议你离线备一份 docker 和 docker-compose 安装包上周帮一个做私有化交付的朋友救火客户现场是内网环境服务器上连yum install docker-ce都跑不通镜像源全被墙在内网之外。他手里只有一个从官网拖下来的docker-27.3.1.tgz和一个孤零零的docker-compose-linux-x86_64二进制结果docker compose version死活报docker: compose is not a docker command。问题不在包本身而在于他没搞清楚 Docker 引擎、CLI、Compose 插件这三者的版本对应关系和安装路径。这份「docker 和 docker-compose 安装包」资源解决的就是这种离线、内网、无外网依赖场景下的部署问题——把二进制包直接铺到目标机器上不碰包管理器不走在线仓库。适合做交付、做测试环境、管离线集群的从业者也适合刚接触 Docker 想搞明白安装本质的新手。下面我按「包是什么 → 怎么装 → 怎么配 → 坑在哪」的顺序拆一遍。2. 先分清三个包引擎、CLI、Compose 到底谁装谁2.1 静态二进制包的组成与版本对应Docker 官方提供的静态二进制压缩包docker-version.tgz解压后/usr/bin下会有一堆可执行文件核心是这几个文件作用是否必须dockerdDocker 守护进程真正干活的引擎必须docker命令行客户端 CLI必须docker-init容器 1 号进程的 init处理信号回收建议保留docker-proxy端口映射的用户态代理建议保留containerd容器运行时dockerd 依赖它必须ctrcontainerd 自带的 CLI调试用可选runc底层 OCI 运行时必须而docker-compose是另一条线。从 Compose V2 开始它不再是一个独立的 Python 程序而是变成了 Docker CLI 的一个插件plugin可执行文件名是docker-compose但调用方式是docker compose中间是空格不是横杠。这一点是新手翻车最集中的地方。版本对应上我一般遵循一个原则Compose 插件版本不要超过 Docker 引擎两个大版本。比如引擎是 27.xCompose 用 2.29 到 2.32 都稳引擎是 24.x硬塞一个 2.32 的 Compose某些compose.yaml新语法会解析失败。资源里如果同时给了引擎包和 Compose 二进制先确认这两个版本号别拿到就装。2.2 为什么不用包管理器而用二进制包apt install docker-ce和yum install docker-ce当然更省事但它们有三个绕不开的前提能访问官方仓库、系统发行版匹配、有 root 且允许装依赖。内网交付、麒麟/统信这类国产系统、老版本 CentOS这三条经常同时不满足。二进制包的优势是「不挑系统」——只要是 x86_64 或 aarch64 的 Linuxglibc 版本别太老一般 2.17 以上解压就能跑。代价是你要自己处理 systemd 服务、自己建用户组、自己配 daemon.json。说白了包管理器帮你做的事你得手动补一遍。下面就把这套手动流程走完。3. 离线安装实操从解压到 systemd 托管3.1 解压铺文件与建立 docker 用户组假设你拿到的是docker-27.3.1.tgz传到目标机器/opt下。整个安装过程不需要联网但需要 root。# 解压会得到一个 docker/ 目录 tar -xzvf /opt/docker-27.3.1.tgz -C /opt # 把二进制文件铺到系统路径 sudo cp /opt/docker/* /usr/bin/ # 验证关键二进制是否就位 dockerd --version docker --version containerd --version逻辑说明tar -xzvf的-C指定解压目标目录避免污染当前目录。cp /opt/docker/*把dockerd、docker、containerd、runc等一次性铺到/usr/bin这样 systemd 和普通用户都能在 PATH 里找到。参数上没什么可调的唯一要注意的是别把docker/目录整个拷进/usr/bin那样会多一层目录导致命令找不到。接着建用户组否则每次敲 docker 都要 sudo# 创建 docker 组已存在会报错可忽略 sudo groupadd docker # 把当前用户加进去 sudo usermod -aG docker $USER # 重新登录或执行下面这条让组生效 newgrp dockerusermod -aG的-a是追加千万别漏漏了会把用户从其他附加组里踢出去这是血泪经验。newgrp docker只对当前 shell 生效最稳的是退出重新登录。3.2 配置 systemd 让 dockerd 开机自启二进制包不带 service 文件得自己写。在/etc/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比simple更准确。LimitNOFILEinfinity是给容器放开文件描述符上限生产环境不加这个容器一多就报too many open files。Delegateyes允许容器内自己管理 cgroup跑 systemd 容器时必须。Restarton-failure配合StartLimitBurst3意思是 60 秒内最多重启 3 次防止崩溃循环把机器拖死。写完执行sudo systemctl daemon-reload sudo systemctl enable docker sudo systemctl start docker sudo systemctl status dockerdaemon-reload不能省改了 service 文件不 reloadsystemd 用的还是旧配置这是排查「改了没生效」的第一检查点。3.3 装 Compose 插件并验证调用方式Compose V2 的二进制下载下来叫docker-compose-linux-x86_64要放到 CLI 的插件目录而不是/usr/bin随便一扔。# 建插件目录 mkdir -p /usr/local/lib/docker/cli-plugins # 放进去并改名名字必须是 docker-compose sudo cp 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 version逻辑说明Docker CLI 会在固定路径扫描插件/usr/local/lib/docker/cli-plugins是系统级路径之一用户级是~/.docker/cli-plugins。文件名必须叫docker-composeCLI 靠文件名识别出compose这个子命令。如果你放到/usr/bin/docker-compose然后敲docker compose大概率报not a docker command因为 CLI 根本没去/usr/bin找插件。想用横杠形式docker-compose调用得额外做个软链但官方推荐统一用空格形式。4. 装完跑不起来daemon.json 与网络排查4.1 daemon.json 的关键参数怎么设装完默认配置能跑但生产上几乎都要改/etc/docker/daemon.json。一个我常用的模板{ data-root: /data/docker, log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, default-ulimits: { nofile: { Name: nofile, Hard: 65536, Soft: 65536 } }, live-restore: true }逻辑说明>ip addr show docker0正常应该看到一个172.17.0.1/16的网桥。没有的话多半是内核没开转发或 iptables 被别的规则清了。第二步确认内核转发开着。sysctl net.ipv4.ip_forward # 返回 0 就临时开 sysctl -w net.ipv4.ip_forward1 # 永久开写进 /etc/sysctl.conf echo net.ipv4.ip_forward1 /etc/sysctl.conf第三步容器内 DNS 解析失败检查/etc/resolv.conf是不是被宿主机的配置带偏了。可以在 daemon.json 里显式指定{ dns: [223.5.5.5, 8.8.8.8] }常见做法是内网环境把 dns 指向内网 DNS 服务器别照抄公网地址。这三步走完九成网络问题能定位。4.3 避坑离线安装最容易踩的五个坑现象一docker: command not found但文件明明拷了。原因拷到了/usr/local/bin但该路径不在 root 的 PATH 里或者拷完没hash -r清缓存。 解决which docker确认路径echo $PATH确认包含必要时hash -r。现象二dockerd启动报failed to start daemon: pid file found。原因上次非正常退出/var/run/docker.pid残留。 解决确认没有 dockerd 进程后rm /var/run/docker.pid再启动。现象三docker compose报not a docker command。原因Compose 二进制没放对插件目录或文件名不是docker-compose。 解决放到/usr/local/lib/docker/cli-plugins/docker-compose并加执行权限。现象四拉镜像报x509: certificate signed by unknown authority。原因内网有自建仓库用了自签证书Docker 不信任。 解决把 CA 证书放到/etc/docker/certs.d/仓库域名/ca.crt重启 dockerd。现象五容器时间比宿主机差 8 小时。原因容器内没挂宿主机时区文件。 解决docker run时加-v /etc/localtime:/etc/localtime:ro或在镜像里设TZAsia/Shanghai。5. 进阶用 Compose 编排一套可复现的验证环境装完不验证等于没装。我习惯用一份最小的compose.yaml把引擎、网络、卷、健康检查全过一遍确认这套离线包真的能用。下面这份跑起来会起一个 Redis 主从加一个 MySQL正好覆盖「docker 安装 redis 主从」和「docker 安装 mysql」这两个高频场景。services: redis-master: image: redis:7.4-alpine container_name: redis-master command: redis-server --appendonly yes ports: - 6379:6379 volumes: - redis-master-data:/data healthcheck: test: [CMD, redis-cli, ping] interval: 10s timeout: 3s retries: 3 redis-replica: image: redis:7.4-alpine container_name: redis-replica command: redis-server --replicaof redis-master 6379 depends_on: redis-master: condition: service_healthy volumes: - redis-replica-data:/data mysql: image: mysql:8.0 container_name: mysql8 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: testdb ports: - 3306:3306 volumes: - mysql-data:/var/lib/mysql command: --default-authentication-pluginmysql_native_password --character-set-serverutf8mb4 volumes: redis-master-data: redis-replica-data: mysql-data:逻辑说明depends_on配合condition: service_healthy保证从节点等主节点健康检查通过后再起避免从节点连不上主节点反复重试。--replicaof是 Redis 5 之后的写法老教程里的slaveof已经废弃。MySQL 的--default-authentication-pluginmysql_native_password是为了兼容老客户端8.0 默认的caching_sha2_password会让一些旧驱动连不上这是「docker 安装 mysql 失败」的常见根因之一。volumes顶层声明具名卷数据落在/var/lib/docker/volumes下容器删了数据还在。启动和验证# 后台启动 docker compose up -d # 看健康状态等 STATUS 变成 healthy docker compose ps # 验证主从 docker exec redis-master redis-cli info replication | grep role docker exec redis-replica redis-cli info replication | grep master_link_status # 验证 MySQL docker exec mysql8 mysql -uroot -prootpass -e show databases;master_link_status:up说明主从同步正常。如果一直是down先看两个容器在不在同一网络——Compose 默认会建一个 bridge 网络服务名就是 DNS 名redis-replica能直接解析redis-master。这一步过了说明你这套离线安装包从引擎到编排全链路可用。从那以后我每次交付前都强制用这份 compose 跑一遍冒烟确认引擎、插件、网络、卷四样都正常才敢上客户机器。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。