从联网到离线:Dify 的 Docker 镜像批量下载与全流程离线部署指南
从联网到离线:Dify 的 Docker 镜像批量下载与全流程离线部署指南
前言
在离线环境中部署 Dify(开源 LLM 应用开发平台)时,如何提前在联网环境中批量下载指定架构的镜像并实现一键部署?本文以 Dify 的 docker-compose
编排文件为例,详细讲解从镜像拉取、批量导出到离线部署的全流程,解决以下核心问题:
- 精准下载
linux/amd64
架构的 Docker 镜像 - 批量打包镜像并迁移至离线环境
- 避免
docker-compose
启动时拉取远程镜像
适用场景
- 生产服务器无外网访问权限
2.开发环境与生产环境需保持镜像版本严格一致 - 需快速搭建 Dify 的离线开发/测试环境
准备工作
1. 联网机器环境要求
- Docker 已安装(版本 ≥ 20.10,支持
-platform
参数) - Docker Compose 已安装
- 可访问 Docker Hub 或私有镜像仓库
2. 离线机器环境要求
- Docker 及 Docker Compose 已安装
- 系统架构为
linux/amd64
完整步骤
步骤 1:获取 Dify 的镜像清单
从 Dify 的官方 docker-compose.yaml
中提取所有镜像名称及版本:
git clone <https://github.com/langgenius/dify.git>
cd dify/docker
cat docker-compose.yaml | grep 'image:'
# 示例输出:
# image: langgenius/dify-api:0.15.3
# image: postgres:15.3
# image: redis:7.0
# image: langgenius/dify-web:0.15.3
整理镜像列表 images.txt
:
langgenius/dify-api:0.15.3
postgres:15.3
redis:7.0
langgenius/dify-ui:0.15.3
可以执行以下命令直接保存为images.txt
文件
grep 'image:' docker-compose.yaml | awk '{print $2}' | sort -u > images.txt
步骤 2:批量下载指定架构的镜像
使用 --platform
参数强制拉取 linux/amd64
镜像:
mkdir -p saved_images && while read img; do
docker pull --platform linux/amd64 "$img"
docker save -o "saved_images/$(echo $img | tr '/' '_' | tr ':' '_').tar" "$img"
done < images.txt
步骤 3:打包镜像文件
将镜像文件打包为 .gz
文件:
tar czvf dify_images.tar.gz saved_images/
步骤 4:迁移至离线环境
使用 U 盘或内网传输工具(如 scp
)将压缩包复制到目标服务器:
scp dify_images.tar.gz user@offline-server:/opt
步骤 5:离线环境加载镜像并(强制离线模式)启动
解压并批量加载镜像:
# 1. 解压并加载镜像
tar xzvf dify_images.tar.gz
cd saved_images
find . -name "*.tar" -exec docker load -i {} \;
# 2. 验证加载结果
docker images
# 输出应包含:
# langgenius/dify-api 0.15.3
# postgres 15.3
# redis 7.0
# langgenius/dify-ui 0.15.3
# 3. 启动服务(强制使用本地镜像)
cd /path/to/docker-compose.yaml
docker-compose up -d --no-pull # 如果docker-compose版本是1.+使用这个
docker-compose up -d --pull=never # 如果docker-compose版本是2.+使用这个
# 4. 验证容器状态
docker ps -a
验证部署
访问 Web 界面
浏览器打开 http://离线服务器IP/install
,应看到 Dify 的初始化界面。Dify的默认端口是80
常见问题排查
Q1:启动时提示 “No such image”
原因:镜像名称或标签与 docker-compose.yaml
不匹配。
解决:
# 对比本地镜像与 compose 文件
docker images | grep dify-api
# 修改 compose 文件匹配实际标签
Q2:Redis 容器频繁重启
原因:默认配置未设置密码导致鉴权失败。
解决:在 docker-compose.yaml
中添加 Redis 密码:
redis:
image: redis:7.0
command: redis-server --requirepass your_password
结语
通过本教程,您已掌握从精准镜像拉取到全离线部署 Dify 的完整流程。关键要点:
- 使用
-platform
确保架构一致性 - 批量脚本处理提高效率
-no-pull
或--pull=never
参数强制使用本地镜像
建议将离线部署流程封装成自动化脚本,进一步提升部署可靠性。欢迎在评论区分享您的实践心得!
扩展阅读
- Dify 官方文档
- Docker 多架构镜像管理指南