离线部署关键在于依赖完整打包与一键复现,缺一不可:镜像归档包(docker save导出tar)、docker运行时支撑文件(如containerd、runc)、启动脚本与配置模板(含加载、网络、容器创建等逻辑)。

离线环境部署的关键,不是“能不能跑起来”,而是“所有依赖是否完整打包、能否一键复现”。Docker 本身不解决离线问题,但配合镜像归档、运行时支撑和脚本封装,就能做到真正的一键部署。
核心三件套:缺一不可
离线部署不是把 Dockerfile 拷过去再 build——那在没网络的机器上根本走不通。必须准备三样东西:
-
镜像归档包:用
docker save导出为 .tar 文件,不是 Dockerfile,也不是 build 上下文;多镜像可一次性导出:docker save nginx:alpine redis:7.2 mysql:8.0 > app-stack.tar -
Docker 运行时:包括
dockerd、containerd、runc等二进制文件(通常系统已预装,但需确认版本兼容性);若未安装,需提前下载离线安装包(如docker-24.0.9.tgz),解压后复制到/usr/local/bin/并配置 PATH -
启动脚本 + 配置模板:一个
start.sh就能完成加载镜像、创建网络、运行容器、挂载卷、设置重启策略等全部动作;建议加入基础校验(如检查 docker 是否就绪、端口是否被占)
打包阶段:构建机上一次搞定
在有网的“构建机”上操作,目标是生成一个可直接拷贝到内网服务器的压缩包:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 写好 Dockerfile(推荐非 root 启动、显式指定基础镜像 tag、COPY 资源而非 ADD)
- 构建并导出:
docker build -t my-app:v1.2 . && docker save my-app:v1.2 | gzip > my-app-v1.2.tar.gz(gzip 可显著减小体积) - 新建
offline-deploy/目录,放入:my-app-v1.2.tar.gz、start.sh、docker-compose.yml(如有)、自定义配置文件、静态资源目录 - 打包:
tar -czf my-app-offline-v1.2.tgz offline-deploy/
部署阶段:目标机上三步执行
在离线服务器上只需三步,无需记忆命令、无需人工干预:
- 解压:
tar -xzf my-app-offline-v1.2.tgz - 加载镜像:
zcat offline-deploy/my-app-v1.2.tar.gz | docker load(支持 gzip 流式加载,不用先解压 tar) - 执行启动:
chmod +x offline-deploy/start.sh && ./offline-deploy/start.sh
脚本内部建议包含:docker network create app-net 2>/dev/null || true(自动建网)、docker run -d --name my-app --network app-net -p 8080:80 ...、sleep 2 && docker logs my-app 2>&1 | head -n 10(简单健康反馈)
上线前必做:固化与验证
一键部署不是终点,而是稳定运行的起点:
- 用
systemctl将容器转为服务:编写/etc/systemd/system/my-app.service,启用开机自启 - 验证容器状态:
docker ps -f name=my-app --format "table {{.ID}}\t{{.Status}}\t{{.Ports}}" - 检查日志是否报错:
docker logs --since 5m my-app | grep -i "error\|fail\|panic" - 若用 docker-compose,确保
docker-compose二进制已部署(静态编译版,直接放/usr/local/bin/即可)










