离线部署Docker Compose的关键是确保全链路无外网依赖:需先确认服务器架构与系统环境,再严格匹配准备Docker引擎、Compose二进制、基础及业务镜像tar包,最后按序部署、加载镜像并验证配置。

直接在离线环境中用 Docker Compose 编排应用,关键不是“怎么写 docker-compose.yml”,而是让整个运行链路不依赖外网——从 Docker 引擎、Compose 工具、基础镜像到业务镜像,全部提前准备好、验证好、放到位。
确认目标服务器架构与系统环境
这一步跳过,90% 的离线部署会失败。不能靠采购单或印象判断,必须登录目标服务器执行命令:
- uname -m:看输出是 x86_64、aarch64 还是 armv7l
- cat /etc/os-release:确认发行版和版本(如 CentOS 7.9、openEuler 22.03、Ubuntu 22.04)
- uname -r:检查内核版本是否 ≥3.10(Docker 最低要求)
架构错配是最隐蔽的坑:x86_64 的 docker-compose 二进制文件放到 aarch64 服务器上,执行时只报 cannot execute binary file,没有更多提示。
准备离线可运行的完整工具链
所有组件必须与上一步确认的架构、系统严格匹配:
-
Docker 二进制包:从 Docker 官方静态包页 下载对应架构目录下的
docker-*.tgz(如docker-29.1.3.tgz) -
Docker Compose v2 二进制:GitHub Releases 下载
docker-compose-linux-x86_64或docker-compose-linux-aarch64(注意:v2 是单二进制,不是 Python 包) -
基础镜像 tar 包:在有网机器用
docker pull alpine:3.20 && docker save alpine:3.20 -o alpine-3.20.tar打包,一并拷入内网 -
业务镜像 tar 包:本地构建后
docker save myapp:1.2 -o myapp-1.2.tar,确保 tag 与 compose 文件中一致
部署服务并预加载镜像
工具链就位后,按顺序执行:
- 解压 Docker 包,把
dockerd、docker等二进制复制到/usr/bin/或/usr/local/bin/ - 配置
/etc/systemd/system/docker.service,启动并启用 docker 服务:systemctl daemon-reload && systemctl enable --now docker - 将 docker-compose 二进制放入
/usr/local/lib/docker/cli-plugins/docker-compose(v2 插件路径),赋予可执行权限 - 加载镜像:
docker load -i alpine-3.20.tar && docker load -i myapp-1.2.tar - 验证镜像存在:
docker images | grep myapp
编写与验证离线友好的 docker-compose.yml
避免任何隐式网络行为:
- 镜像名用完整 tag,不依赖默认 registry:
image: myapp:1.2(而非myapp) - 禁用
build:段——离线环境无法执行构建,所有镜像必须提前 build + save - 移除
depends_on: [xxx]中的健康检查脚本(除非该脚本完全静态且无网络调用) - 挂载宿主机路径时,确保目录已创建、权限正确(如
./conf:/app/conf要提前mkdir -p ./conf) - 首次运行前,先
docker-compose config检查语法;再docker-compose up -d启动


















