从联网到离线:Dify 的 Docker 镜像批量下载与全流程离线部署指南


从联网到离线:Dify 的 Docker 镜像批量下载与全流程离线部署指南

前言

在离线环境中部署 Dify(开源 LLM 应用开发平台)时,如何提前在联网环境中批量下载指定架构的镜像并实现一键部署?本文以 Dify 的 docker-compose 编排文件为例,详细讲解从镜像拉取、批量导出到离线部署的全流程,解决以下核心问题:

  • 精准下载 linux/amd64 架构的 Docker 镜像
  • 批量打包镜像并迁移至离线环境
  • 避免 docker-compose 启动时拉取远程镜像

适用场景

  1. 生产服务器无外网访问权限
    2.开发环境与生产环境需保持镜像版本严格一致
  2. 需快速搭建 Dify 的离线开发/测试环境

准备工作

1. 联网机器环境要求

  • Docker 已安装(版本 ≥ 20.10,支持 -platform 参数)
  • Docker Compose 已安装
  • 可访问 Docker Hub 或私有镜像仓库

2. 离线机器环境要求

  • Docker 及 Docker Compose 已安装
  • 系统架构为 linux/amd64

完整步骤

步骤 1:获取 Dify 的镜像清单

从 Dify 的官方 docker-compose.yaml 中提取所有镜像名称及版本:

bash 复制代码
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文件

bash 复制代码
grep 'image:' docker-compose.yaml | awk '{print $2}' | sort -u > images.txt

步骤 2:批量下载指定架构的镜像

使用 --platform 参数强制拉取 linux/amd64 镜像:

bash 复制代码
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 文件:

bash 复制代码
tar czvf dify_images.tar.gz saved_images/

步骤 4:迁移至离线环境

使用 U 盘或内网传输工具(如 scp)将压缩包复制到目标服务器:

bash 复制代码
scp dify_images.tar.gz user@offline-server:/opt

步骤 5:离线环境加载镜像并(强制离线模式)启动

解压并批量加载镜像:

bash 复制代码
# 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 不匹配。

解决

bash 复制代码
# 对比本地镜像与 compose 文件
docker images | grep dify-api
# 修改 compose 文件匹配实际标签

Q2:Redis 容器频繁重启

原因:默认配置未设置密码导致鉴权失败。

解决 :在 docker-compose.yaml 中添加 Redis 密码:

yaml 复制代码
redis:
  image: redis:7.0
  command: redis-server --requirepass your_password

结语

通过本教程,您已掌握从精准镜像拉取到全离线部署 Dify 的完整流程。关键要点:

  1. 使用 -platform 确保架构一致性
  2. 批量脚本处理提高效率
  3. -no-pull--pull=never参数强制使用本地镜像

建议将离线部署流程封装成自动化脚本,进一步提升部署可靠性。欢迎在评论区分享您的实践心得!


扩展阅读

相关推荐
❀͜͡傀儡师2 小时前
Docker 部署Datart BI工具完整指南(PostgreSQL 持久化存储)
docker·postgresql·容器
l1t3 小时前
解决用docker安装umbra数据库遇到的FATAL:Operation not permitted错误
数据库·docker·容器
last demo3 小时前
docker存储
运维·docker·容器
无名-CODING3 小时前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
向往着的青绿色3 小时前
雷池(SafeLine)社区版免费部署教程|从环境检查到防护实操全流程
网络·计算机网络·nginx·网络安全·容器·网络攻击模型·信息与通信
Sst的头号粉丝4 小时前
Kubernetes——介绍
云原生·容器·kubernetes
木二_4 小时前
057.Kubernetes cert-manager ACME方案介绍
云原生·容器·kubernetes·证书·cert-manager·证书管理
危笑ioi5 小时前
基于Kubeconfig实现K8s节点免密登录
云原生·容器·kubernetes
木二_5 小时前
058.Kubernetes cert-manager 申请证书及ingress注解介绍
云原生·容器·kubernetes·cert-manager·证书管理
kabu_Charlie5 小时前
使用Docker运行python程序
运维·docker·容器