在生产环境或内网部署场景中,常常面临无法联网的限制。在没有网络连接的环境中,我们依然可以使用 Docker Compose 来启动多个容器服务。本文将手把手教你如何准备镜像、导入资源,并成功运行容器编排。
🧰 一、准备工作:联网环境中完成资源采集
1. 拉取所需镜像
在有网络的电脑上,进入你的项目目录,执行:
bash
docker compose pull
这一步会下载 docker-compose.yml
中定义的所有镜像。
2. 导出镜像文件
使用 docker save
命令将镜像保存为 .tar
文件:
bash
docker save 镜像名:标签 -o 镜像名.tar
# 示例:
docker save nginx:1.25 -o nginx.tar
docker save redis:7.2 -o redis.tar
你可以将多个镜像打包一起传输,也可以分别保存。
3. 打包项目文件
确保以下文件一并打包带到离线环境:
docker-compose.yml
.env
(如果有)- 所需配置文件、静态资源、初始化脚本等
📦 二、离线环境中导入与部署
1. 安装 Docker 和 Docker Compose
确保离线环境已安装:
- Docker 引擎
- Docker Compose 插件(推荐使用新版 CLI 插件)
你可以在联网环境下载 .deb
或 .rpm
安装包,拷贝到离线机器安装。
2. 导入镜像
将 .tar
文件拷贝到离线机器,执行:
bash
docker load -i nginx.tar
docker load -i redis.tar
验证镜像是否导入成功:
bash
docker images
3. 创建必要的网络与卷(如有)
如果 Compose 文件中引用了自定义网络或命名卷,需提前创建:
bash
docker network create my_network
docker volume create my_volume
🚀 三、启动容器编排
进入项目目录,执行:
bash
docker compose up -d
这将以后台模式启动所有服务。查看运行状态:
bash
docker compose ps
🧪 四、常见问题与解决方案
错误提示 | 原因 | 解决方法 |
---|---|---|
pull access denied |
镜像未导入 | 使用 docker load 导入 .tar 文件 |
unknown flag: -d |
Compose 版本不兼容 | 使用新版 Docker Compose 插件 |
network not found |
引用了未创建的网络 | 手动创建网络:docker network create |
service exited with code 1 |
容器启动失败 | 查看日志:docker logs 容器名 |
📌 附加建议
- ✅ 使用固定版本号的镜像,避免未来变动。
- ✅ 在 Compose 文件中使用本地镜像名,确保一致性。
- ✅ 使用
docker compose config
检查配置是否展开正确。 - ✅ 可将镜像集中打包为一个压缩文件,便于传输。
📁 示例项目结构
my-project/
├── docker-compose.yml
├── .env
├── nginx/
│ └── default.conf
├── redis/
│ └── redis.conf
└── 镜像文件/
├── nginx.tar
└── redis.tar