目录
(2)Error response from daemon:Get "https://registry-1.docker.io/v2/": ....
9.Dify加载页面卡住(Internal Server Error)
前言:
Dify 是一款开源的自动化运维平台,本文将详细介绍如何在 Windows 10 家庭版上本地部署 Dify,并记录部署过程中遇到的各种问题及解决方案。
(本人是新手小白,耗时近一周才部署成功,中间遇到了各种问题,写这篇文章一方面是记录自己中途遇到的问题,一方面是给和我一样的新手小白提供一些参考,希望你们遇到和我一样的问题都能快速解决。)
环境准备
-
操作系统: Windows 10 家庭版
一、下载安装Docker
1.前置准备
首先,Docker 在 Windows 上运行需要虚拟化技术支持,而windows中的docker可以依赖两种环境,分别是Hyper-V(虚拟环境)和WSL(Linux子系统),本教程使用基于Hyper-V环境的方法来进行虚拟化技术支持。
(1)虚拟化检查
首先我们进行虚拟化检查,打开任务管理器(快捷键:Ctrl + Shift + Esc)点击到性能,选择左侧列的CPU,查看是否虚拟化已经支持,若未支持则需要重启进入BIOS打开虚拟化支持(默认都是已启用的)。
(2)启用 Hyper-v 并开启虚拟任务
!!! 这里需要说明,win10家庭版本身没有Hyper-V这个功能,所以我们是找不到这个选项的。因此我们首先要在电脑上安装Hyper-v(如果已有请跳过安装Hyper-v)。
安装Hyper-v
新建一个txt文件,复制如下内容点击保存,保存后修改文件后缀名为.cmd,
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
然后以管理员身份运行该cmd文件,等待运行结束后,根据提示输入Y并重启计算机。
此时启用或关闭系统功能中才会有Hyper-V选项
a)打开 “控制面板”--“程序”--"程序和功能”
b)点击“启用或关闭 Windows 功能”
c)勾选下面红框标注的 4 个功能组件,点击确定开始安装,完毕后根据提示重启电脑。
d)修改注册表,伪装专业版
重启后,以管理员身份打开cmd,执行如下命令(此处是将注册表的值修改为Professional以使能正常运行,即伪装成win10专业版。)
REG ADD "HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion" /v EditionId /T REG_EXPAND_SZ /d Professional /F
√√√ 此时前置准备完成!!!
2.下载安装DockerDesktop
(1)下载安装文件
首先进入官网下载.exe安装文件, Docker Desktop: 下载地址
点击进入此页面后,向下滑找到Download Docker Desktop,选择合适的安装包点击下载:
!!!注意 如果你对Docker Desktop下载到本地的位置以及后期Docker镜像拉取位置没有要求,你可以直接跳到(4)安装操作,直接安装。 如果你想将Docker Desktop安装以及镜像拉取位置放到其他盘,请务必执行(2)(3)两步的操作:
(2)新建文件夹
首先新建一个命名为Docker的文件夹,作为Docker Desktop的安装目录;再在Docker文件夹下新建一个命名为data的文件夹,用于存储Docker镜像、容器、卷等数据(在执行下一步前一定要提前手动创建好对应文件夹,不然会报错);
(3)cmd窗口输入安装命令
以管理员身份打开Windows终端,并转到你下载文件的位置,在命令提示符内运行下面代码(先不要复制到cmd命令窗口,先根据自己实际文件路径进行修改后再复制);
start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="D:\software\Docker" --hyper-v-default-data-root="D:\software\Docker\data" --windows-containers-default-data-root="D:\\software\\Docker"
其中,D:\software\Docker 修改为自己的Docker Desktop 的安装路径,D:\software\Docker\data修改为自己的镜像存储路径(上面新建的data文件夹路径)。D:\\software\\Docker,表示在 Windows 操作系统中,Docker 程序将被安装在 D 盘的software文件夹内的一个名为 Docker 的子文件夹中,记得双斜杠(转义字符)。
(4)安装操作
如果对安装目录没有要求,可以直接双击下载的.exe文件(这种安装方式会默认将软件安装到C盘,不推荐这种安装方式)。
此时无论是哪种方式安装都会自动进入Configuration配置:
这里安装时会默认勾选使用WSL2替代Hyper-V选项以及创建桌面快捷方式选项,我们需要将Use WSL 2 instead of Hyper-V(recommended)选项勾掉(否则Docker Desktop会一直处于Stopped状态且无明显报错提示,就算安装好后Docker Desktop也会显示空白并且一直提示Docker Engine stopped的问题)。
点击ok后会Docker Desktop进入如下界面,等待下载安装完成点击Close即可:
(5)验证Docker是否安装成功
首先我们打开cmd窗口,输入以下命令:
Docker --version
成功返回版本信息,说明 Docker 安装成功了!!!
(6)启动Docker Desktop
双击桌面快捷键即可启动Docker Desktop,点击接受协议:
可直接点击跳过账号注册:
看到如下界面,表示Docker Desktop安装成功:
这里也可以通过“设置”--“Resources”,看到我们当时安装时设置的容器、镜像的保存位置是在我们设置的路径。
(7)配置镜像
2024 年 6 月左右,国内多个 Docker 镜像源出现停止服务的情况,如上海交大、南京大学的镜像源,以及网易、百度等镜像源都不可用了,中科大也暂时关闭了 Docker Hub 镜像缓存服务。所以需要自己去寻找可以使用的镜像,不过还是有些前辈们,一直维护着可以使用的Docker可用镜像源:点击跳转(此处十分感谢所有为我们提供帮助的前辈们!!!)
a)我们点击右上角的设置按钮,进入设置界面:
b)选择Docker Engine,在配置中后方直接添加下图红框内容(此处不要忘了在false后新增内容时要增加一个英文逗号,否则会报语法错误),然后点击Apply&restart。
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
#配置镜像(寻找可用的镜像进行配置)
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
(8)测试Docker
此时Docker安装完成并且配置完成,我们可以pull个项目测试Docker是否正常运行,并且是否能够正常拉取镜像。
打开cmd窗口,输入以下命令:
Docker pull hello-world
拉取完成后,我们可以在cmd窗口输入以下命令,查看当前本地已用镜像:
docker images
可以看到我们已经成功将hello-world拉取下来了:
此时,我们就完成了Docker的安装与配置!!!!!!!(撒花撒花❀❀)
二、本地部署Dify
1.下载Dify文件
进入dify项目github主页下载Dify文件:点击跳转,点击Download ZIP进行手动下载文件(也可通过git进行下载)。
2.解压压缩文件
右键选择ZIP文件进行解压,解压到自己设置的路径。
3.修改配置文件文件名
进入到dify项目下的docker文件夹,找到.env.example文件,直接将文件名修改为.env。
!!!注意:有些教程是直接复制一个.env.example文件并修改文件名为.example,但我在部署Dify的过程中发现最好不要保留原始的.example文件,否则可能会出现Dify网址进不去,修改.env配置信息无效的情况!!!
4.检查docker compose版本
以管理员身份打开cmd命令窗口,进入到dify下的docker目录,输入以下命令,查看自己的docker compose版本是v1还是v2(输入后先不要关闭这个窗口,后面还要使用cmd命令窗口):
docker-compose --version
5.部署Dify
(直接在上一个未关闭的窗口输入即可)管理员身份打开 cmd命令窗口,进入到dify项目的docker目录,并保证Docker Desktop是打开状态(双击快捷键打开):
选择适用的命令进行Dify部署:
#如果docker compose是v1版本
docker-compose up -d
#如果docker compose是v2版本
docker compose up -d
等待部署完成;
!!!注意:如果这条命令你未出现任何错误,那么恭喜你你的部署太顺利了,但是如果你的这步出现了问题请查看下一步,我专门列出了各种这一步的错误合集,你可以在部署Dify过程错误合集找一下自己存在的问题。
第一次拉取的时候是直接80个东西:
6.部署Dify过程错误合集!!!
(1) error during connect: Post "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.47/containers/create?name=
红线处内容可能不同,但是都是类似问题:
解决方法:多次尝试重新输入以下命令继续部署Dify,可以发现name后内容会变换,直至顺利拉取或者出现其余类型问题为止。
#如果docker compose是v1版本
docker-compose up -d
#如果docker compose是v2版本
docker compose up -d
(2)Error response from daemon:Get "https://registry-1.docker.io/v2/": ....
解决方法:这个问题是网络的问题,需要去Docker Engine检查国内镜像是否过期,需要更换一个可以使用的镜像;或者是通过打开梯子再次执行命令。
(3)Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 -> 127.0.0.1:0: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
这个错误提示表明 Docker 在尝试将容器的端口映射到宿主机的 80 端口时失败了,原因是权限不足,无法绑定到 0.0.0.0:80 这个地址和端口。主要是由于端口 80 是特权端口(通常需要管理员权限才能使用),可以将端口映射到一个非特权端口(大于 1024 的端口)。
解决方法:这个问题一般是Nginx端口权限问题,
a)我们可以选择更改Nginx默认使用的端口。进入dify文件下的docker文件夹找到.env文件,修改.env文件配置,ctrl+F找到EXPOSE_NGINX_PORT,修改端口号为8081(大于1024的端口);
b)输入以下命令,停止并移除通过 docker compose up
启动的服务容器;
docker compose down
c)重新部署Dify。
#如果docker compose是v1版本
docker-compose up -d
#如果docker compose是v2版本
docker compose up -d
(4)容器db-1总是重启
在Deocker Desktop首页中可以看到db-1可以通过Actions状态查看这个容器的状态在一直改变,或者直接点击相应容器查看STATUS观察到状态一直在反复重启,db-1反复重启的状况会导致http://localhost刷新不出来。
解决方法:
a)进入dify源码的docker目录下,打开docker-compose.yaml;
b)在yaml文件中通过快捷键Ctrl+F搜索services,在services下的db下修改volumes,将./volumes/db/data修改为postgres-data;
#- ./volumes/db/data:/var/lib/postgresql/data(原文件内容)
#修改为
- postgres-data:/var/lib/postgresql/data
c)在docker-compose.yaml文件最末尾的volumes下添加“postgres-data:”(注意缩进);
postgres-data:
d) 输入以下命令,停止并移除通过 docker compose up
启动的服务容器;
docker compose down
e)重新部署Dify;
#如果docker compose是v1版本
docker-compose up -d
#如果docker compose是v2版本
docker compose up -d
f)运行完成后,容器重启,db-1恢复正常。
7.查看容器信息
输入以下命令,查看当前正在运行的 Docker 容器信息 ,查看Dify所需要的所有服务是否正常运行:
docker ps
也可以通过Docker Desktop查看当前容器信息:
8.访问本地Dify主页
在浏览器输入以下适用于自己的网址:
#(localhost可以修改为127.0.0.1)
#如果你没有修改过Nginx的端口号
http://localhost/install
#如果你修改了Nginx的端口号(此处8081为你修改过的端口号)
ttp://localhost:8081/install
输入后正确进入Dify网页,此时代表Dify本地部署完成,首次进入需要进行账号注册:
此时,Dify本地化部署就完成了!!!!(恭喜大家攻克难关,终于用上Dify)
!!!注意:如果你到达这一步没有正常加载注册界面,请查看下一节:Dify加载页面卡住。
9.Dify加载页面卡住(Internal Server Error)
一般出现这种Dify输入网址后加载页面卡住的问题,又是可能会显示:Internal Server Error,可能是很多原因导致的,你可以根据我下面的步骤一步一步的排除自己到底是什么问题,并且进行解决:
F12查看错误代码(502、500....):
(1)容器是否正常运行
首先检查所有容器是否正常运行:打开DockerDesktop查看所有容器是否都全部打开,并正常运行:
如果未打开,请保证全部容器是运行状态,并保证状态为一直运行状态!!!
操作方案:
选择docker前的选项即可选择Dify所需的全部容器,点击右上角的开启按钮,打开所有容器,
并且检查所有容器状态Actions是否都为下图的 方框(代表正在运行):
(2)容器db-1状态是否一直重启
打开Docker Desktop检查db-1容器状态,是否为一直重启状态:
观察这个状态是否一直在改变,状态显示在 “Restarting”,
解决方案:
a)进入dify源码的docker目录下,打开docker-compose.yaml;
b)在yaml文件中通过快捷键Ctrl+F进行搜索services,在services下的db下修改volumes,将./volumes/db/data修改为postgres-data;
#- ./volumes/db/data:/var/lib/postgresql/data(原文件内容)
#修改为
- postgres-data:/var/lib/postgresql/data
c)在docker-compose.yaml文件最末尾的volumes下添加“postgres-data:”(注意缩进);
postgres-data:
d) 输入以下命令,停止并移除通过 docker compose up
启动的服务容器;
docker compose down
e)重新部署Dify;
#如果docker compose是v1版本
docker-compose up -d
#如果docker compose是v2版本
docker compose up -d
f)运行完成后,容器重启,db-1恢复正常。
(3).env.example文件是否删除
如果容器都正常运行,可以进入Dify下的Docker文件夹下检查.env.example文件是否重命名为.env文件,并且不要保留原始的.env.example文件:
(4)更换端口号
如果以上操作你都确保正确了,那么你可以尝试更改一下Nginx的默认使用端口:
操作方案:
a)我们可以选择更改Nginx默认使用的端口。进入dify文件下的docker文件夹找到.env文件,修改.env文件配置,Ctrl+F找到EXPOSE_NGINX_PORT,修改端口号为8081;
b)输入以下命令,停止并移除通过 docker compose up
启动的服务容器;
docker compose down
c)重新部署Dify。
#如果docker compose是v1版本
docker-compose up -d
#如果docker compose是v2版本
docker compose up -d
三、总结
在 Windows 10 家庭版环境下本地部署 Dify 时,主要面临两大核心挑战:
-
虚拟化环境缺失问题
由于家庭版系统默认未集成 Hyper - V 组件,导致 Docker Desktop 安装时会触发环境检查失败。即使通过手动安装 WSL 2 并配置 Linux 子系统,仍需额外启用「虚拟机平台」功能组件,整个环境搭建过程存在较高的技术门槛。 -
容器化服务启动异常
在执行docker compose up -d
时,常见以下典型故障:- 端口权限冲突:特权端口(如 80/443)需要管理员权限才能绑定,而家庭版系统的 UAC 策略可能限制权限提升
- 镜像依赖缺失:部分服务需要特定版本的基础镜像,网络波动或仓库访问问题会导致拉取失败
最后致每一位坚持者:
你不是在与软件对抗,而是在重塑自己的技术认知边界。当看到所有容器状态变为绿色运行,当浏览器终于加载出期待已久的界面,那份突破重重阻碍后的成就感,将如破晓的阳光般驱散所有疲惫。
技术的真谛从不在顺利的部署,而在你与问题死磕时绽放的智慧火花。 继续前行吧,每一个成功运行的容器,都是你征服技术高峰的里程碑!!!!!!!!!!!!!!!!!!!!!
!!!最后我想问,大家学习Dify,部署Dify的目的是什么呢?大家可以动手投下票,也可以看看大家都是什么目的部署的Dify!!!!