Dify Docker 离线部署指南:从镜像打包到无网环境部署
Docker 离线部署 Dify 涉及在线环境准备镜像与配置文件,通过 docker save 打包镜像为 tar 文件,迁移至离线机器后使用 docker load 导入。配合 docker-compose.yml 启动容器,验证端口与持久化存储配置。常见问题包括镜像导入失败、端口冲突及存储路径调整。该方案适用于企业安全合规或网络受限场景下的 AI 应用私有化部署。

Docker 离线部署 Dify 涉及在线环境准备镜像与配置文件,通过 docker save 打包镜像为 tar 文件,迁移至离线机器后使用 docker load 导入。配合 docker-compose.yml 启动容器,验证端口与持久化存储配置。常见问题包括镜像导入失败、端口冲突及存储路径调整。该方案适用于企业安全合规或网络受限场景下的 AI 应用私有化部署。

在企业的生产环境中,出于安全合规或网络限制的考虑,往往需要在离线环境中部署服务。接下来将以开源 AI 应用框架 Dify 为例,介绍如何通过 Docker 实现跨网络环境的离线部署,涵盖镜像打包、文件迁移、环境验证等全流程操作。
通过 Docker 的 save/load 机制实现镜像的物理介质迁移,配合 Docker Compose 编排文件的环境适配能力,可在完全断网的环境中快速部署复杂应用。整个过程分为在线环境准备和离线环境还原两个阶段。
# 验证 Docker 环境
docker --version && docker-compose --version
git clone https://github.com/langgenius/dify.git
cd dify/docker # 关键路径!
docker-compose up -d # 自动拉取所有依赖镜像
docker-compose pull # 仅拉取镜像不启动容器
# 查询所需镜像
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 的镜像:
docker save -o dify_web.tar langgenius/dify-web:1.0.1
如果想保存一个名为 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 的包里面。
从 Dify 的官方 GitHub 仓库下载 docker-compose.yml 文件:
git clone https://github.com/langgenius/dify.git
cd dify/docker
传输包内容:
dify_all.tar # 镜像包
docker-compose.yml # 来自 dify/docker 目录
将 dify_all.tar 文件复制到离线环境的机器上,然后使用以下命令导入镜像:
docker load -i dify_all.tar
# 验证导入结果
docker images | grep -E 'dify|postgres|redis'
将 docker-compose.yml 文件复制到离线环境的机器上,然后使用以下命令启动 Dify:
# 调整配置文件(如需)
vi docker-compose.yml # 修改端口、存储路径等
# 启动容器
docker-compose up -d
# 查看 Docker 镜像
docker images
# 查看容器状态
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# 预期输出示例:
# CONTAINER ID NAMES STATUS PORTS
# a1b2c3d4e5f6 dify-web-1 Up 2 hours 0.0.0.0:80->80/tcp
# b2c3d4e5f6a7 dify-sandbox-1 Up 2 hours 3000/tcp
# c3d4e5f6a7b8 postgres-1 Up 2 hours 5432/tcp
# d4e5f6a7b8c9 redis-1 Up 2 hours 6379/tcp
浏览器访问 http://<服务器 IP>:80,若显示 Dify 初始化页面则表示部署成功。
# 检查文件完整性
sha256sum dify_all.tar
# 对比在线/离线环境哈希值
修改 docker-compose.yml 中的端口映射:
services:
web:
ports:
- "8080:80" # 主机端口:容器端口
volumes:
- /data/dify/pg_data:/var/lib/postgresql/data
- /data/dify/redis_data:/data
如果看到 Dify 相关的容器处于 Up 状态,说明部署成功。就可以通过浏览器访问 Dify 的 Web 界面,进行后续的配置和使用。
通过本方案的详细步骤,即使在没有互联网接入的隔离环境中,也能快速部署 Dify 服务。这种基于 Docker 的离线部署方案同样适用于其他容器化应用,为企业的安全部署提供了可靠的技术路径。
部署过程中如遇问题,可查看容器日志定位原因:
docker logs <container_id>

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online