从联网到离线: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参数强制使用本地镜像

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


扩展阅读

相关推荐
tianfs42 分钟前
docker安装和镜像源替换
ubuntu·docker
专注代码七年1 小时前
如何在腾讯云 OpenCloudOS 上安装 Docker 和 Docker Compose
docker
江湖有缘3 小时前
【Docker管理工具】部署Docker管理面板DweebUI
运维·docker·容器
masx2003 小时前
在 Docker 中部署 etcd 并解决权限问题实战指南,成功解决permission denied问题!
docker·etcd
小钱c76 小时前
MacOS安装Docker Desktop并汉化
macos·docker·容器
笨小蛙7 小时前
服务器Docker容器创建与VScode远程连接SSH使用
服务器·vscode·docker·容器·ssh
蓝色的猴子7 小时前
Linux.docker.k8s基础概念
linux·docker·kubernetes
斯普信云原生组8 小时前
K8S集群主机网络端口不通问题排查
网络·容器·kubernetes
matrixlzp8 小时前
K8S StatefulSet 快速开始
云原生·容器·kubernetes
David爱编程8 小时前
容器网络是怎么工作的?Pod、Service、CNI 一次讲清楚!
后端·云原生·容器