从联网到离线: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 小时前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
wangqiaowq2 小时前
PostgresSQL server Docker 安装部署
运维·docker·容器
程序员阿明2 小时前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
TTATTC3 小时前
让 16 个 AI 员工在飞书群自我协同:基于 OpenClaw 的多 Agent 敏捷 Squad 拓扑与一人公司实操
docker·开源
TTATTC3 小时前
从分片续传到 SPI 插件化扩展:Free-FS 企业级文件系统核心架构与万能预览技术拆解
docker·开源
JavaPub-rodert4 小时前
Docker 容器为什么 stop 半天停不下来?讲透 PID 1、SIGTERM、SIGKILL、僵尸进程与 tini
运维·docker·容器
EterNity_TiMe_8 小时前
Docker服务越装越多记不住端口?我用Fenrus把NAS里的常用入口整理成一个导航页
运维·人工智能·docker·ai·容器·cpolar
吴声子夜歌8 小时前
Docker入门与实战——libnetwork插件化网络功能
网络·docker·容器
江湖有缘9 小时前
Docker实战 | 使用Docker部署HarborGuard容器安全扫描平台
安全·docker·容器
江湖有缘9 小时前
Docker实战 | 使用Docker部署Reubah文件转换器和图像处理器
docker·容器·eureka