> 技术文档 > LLM - Docker离线部署Dify:从镜像打包到无网环境部署_dify离线部署

LLM - Docker离线部署Dify:从镜像打包到无网环境部署_dify离线部署


文章目录

  • Pre
  • 引言
  • 一、离线部署原理
  • 二、在线环境操作
    • 1. 环境准备
    • 2. 在线环境: 获取Dify资源
    • 3. 拉取镜像(两种方式)
      • 方式一:直接启动容器(自动下载)
      • 方式二:显式拉取镜像(推荐)
    • 4. 镜像打包
      • 单镜像
      • 多镜像批量打包
    • 5. 文件整理
  • 三、离线环境部署
    • 1. 镜像导入
    • 2.部署Dify
    • 3. 部署验证
    • 4. 访问服务
  • 四、常见问题排查
    • 1. 镜像导入失败
    • 2. 端口冲突
    • 3. 存储持久化
  • 结语

LLM - Docker离线部署Dify:从镜像打包到无网环境部署_dify离线部署

Pre

LLM - Dify Docker镜像拉取失败的解决办法

LLM - Dify(1.0.1)搭建本地私有RAG知识库完整指南


引言

在企业的生产环境中,出于安全合规或网络限制的考虑,往往需要在离线环境中部署服务。接下来我将以开源AI应用框架Dify为例,手把手教你如何通过Docker实现跨网络环境的离线部署,涵盖镜像打包、文件迁移、环境验证等全流程操作.


一、离线部署原理

通过Docker的save/load机制实现镜像的物理介质迁移,配合Docker Compose编排文件的环境适配能力,可在完全断网的环境中快速部署复杂应用。整个过程分为在线环境准备离线环境还原两个阶段。


二、在线环境操作

1. 环境准备

  • 在线环境:一台可以访问互联网的机器,安装好Docker和Docker Compose。
  • 离线环境:目标部署机器,安装好Docker和Docker Compose
# 验证Docker环境docker --version && docker-compose --version

2. 在线环境: 获取Dify资源

git clone https://github.com/langgenius/dify.gitcd dify/docker # 关键路径!

3. 拉取镜像(两种方式)

方式一:直接启动容器(自动下载)

docker-compose up -d # 自动拉取所有依赖镜像

方式二:显式拉取镜像(推荐)

docker-compose pull # 仅拉取镜像不启动容器

4. 镜像打包

LLM - Docker离线部署Dify:从镜像打包到无网环境部署_dify离线部署

# 查询所需镜像docker images # 多镜像打包(示例版本号以实际为准)docker save -o dify_all.tar \\ langgenius/dify-web:0.15.2 \\ langgenius/dify-sandbox:0.2.10 \\ postgres:13 \\ redis:6.2

单镜像

将拉取的镜像保存为tar文件:

docker save -o myimage.tar myimage:tag

myimage.tar是你想要创建的tar文件的名字,myimage:tag是想要保存的镜像的名称和标签 , tag建议和 docker images 展示的tag保持一致 。

举个例子:如果想保存一个名为langgenius/dify-web、标签为1.0.1的镜像

LLM - Docker离线部署Dify:从镜像打包到无网环境部署_dify离线部署

docker save -o dify_web.tar langgenius/dify-web:1.0.1

多镜像批量打包

LLM - Docker离线部署Dify:从镜像打包到无网环境部署_dify离线部署

如果想保存一个名为langgenius/dify-web、标签为1.0.1 的镜像和名为langgenius/dify-sandbox、标签为0.2.10的镜像,以及其他所有的镜像

docker save -o dify_all.tar langgenius/dify-web:1.0.1 langgenius/dify-sandbox:0.2.10 .........(省略)

这样可以把所有Dify依赖的镜像打到一个dify_all.tar的包里面。


5. 文件整理

从Dify的官方GitHub仓库下载docker-compose.yml文件:

git clone https://github.com/langgenius/dify.gitdocker目录下
传输包内容:├── dify_all.tar # 镜像包└── docker-compose.yml # 来自dify/docker目录

三、离线环境部署

1. 镜像导入

将dify_all.tar文件复制到离线环境的机器上,然后使用以下命令导入镜像

docker load -i dify_all.tar# 验证导入结果docker images | grep -E \'dify|postgres|redis\'

2.部署Dify

将docker-compose.yml文件复制到离线环境的机器上,然后使用以下命令启动Dify

# 调整配置文件(如需)vi docker-compose.yml # 修改端口、存储路径等# 启动容器docker-compose up -d

3. 部署验证

#查看Docker 镜像docker images# 查看容器状态docker ps --format \"table {{.ID}}\\t{{.Names}}\\t{{.Status}}\\t{{.Ports}}\"# 预期输出示例:CONTAINER ID NAMES  STATUS PORTSa1b2c3d4e5f6 dify-web-1 Up 2 hours 0.0.0.0:80->80/tcpb2c3d4e5f6a7 dify-sandbox-1 Up 2 hours 3000/tcpc3d4e5f6a7b8 postgres-1 Up 2 hours 5432/tcpd4e5f6a7b8c9 redis-1 Up 2 hours 6379/tcp

4. 访问服务

浏览器访问 http://:80,若显示Dify初始化页面则表示部署成功。

四、常见问题排查

1. 镜像导入失败

# 检查文件完整性sha256sum dify_all.tar # 对比在线/离线环境哈希值

2. 端口冲突

修改docker-compose.yml中的端口映射:

services: web: ports: - \"8080:80\" # 主机端口:容器端口

3. 存储持久化

volumes: - /data/dify/pg_data:/var/lib/postgresql/data - /data/dify/redis_data:/data

如果看到Dify相关的容器处于Up状态,说明部署成功。就可以通过浏览器访问Dify的Web界面,进行后续的配置和使用


结语

通过本篇博客的详细步骤,即使在没有互联网接入的隔离环境中,也能快速部署Dify服务。这种基于Docker的离线部署方案同样适用于其他容器化应用,为企业的安全部署提供了可靠的技术路径。

部署过程中如遇问题,可查看容器日志定位原因:

docker logs -f <容器ID>

在这里插入图片描述