学习 Dify 遇到的一些问题

学习 Dify 遇到的一些问题

本地 Docker 部署 Dify 踩的四个坑,记录一下。

一、80 端口被占用,容器起不来

docker compose up -d报错:

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.

Windows 的 80 端口被系统服务占了,Docker 绑不上。

解决:.env里的宿主机映射端口:

# 改前 EXPOSE_NGINX_PORT=80 EXPOSE_NGINX_SSL_PORT=443 # 改后 EXPOSE_NGINX_PORT=8080 EXPOSE_NGINX_SSL_PORT=8443

容器内部 Nginx 还是 80 不用动,映射自动变成8080:80。改完docker compose up -d,访问http://localhost:8080

注意:通过http://localhost/signin进入 dify,默认请求 80 端口,要改为http://localhost:8080/signin

二、管理员账号未知

用了别人分享的文件夹,启动后管理员已被创建,/install页面进不去。

解决:删掉整个文件夹,GitHub 重新 clone,重新docker compose up -d,就能正常创建管理员了。本质是 PostgreSQL 数据卷里存了别人的账号信息。

三、工作流卡在"同步数据"

1.16.1 版本 bug,工作流界面一直转圈进不去。

解决:修改docker-compose.yml镜像标签:

image:langgenius/dify-api:1.14.2image:langgenius/dify-web:1.14.2

重启:

dockercompose pulldockercompose up-d

缺点:失去 v1.16 新 Agent 沙箱功能;优点:工作流秒加载、无同步卡死。

四、代码节点报沙箱网络错误(重点)

代码节点 Test Run 报错:

Failed to execute code, which is likely a network issue, please check if the sandbox service is running. ( Error: [Errno -3] Temporary failure in name resolution )

原因:docker/volumes/sandbox/conf/目录下缺少config.yaml。Docker 镜像不会自动生成这个文件,sandbox 找不到配置就默认禁用网络。

解决:从dify-sandbox 源码拿到配置,创建docker/volumes/sandbox/conf/config.yaml

app:port:8194debug:Falsekey:dify-sandboxmax_workers:4max_requests:50worker_timeout:15python_path:/opt/python/bin/python3enable_network:Trueenable_preload:Falselog_path:"./logs"allowed_syscalls:proxy:socks5:''http:'http://ssrf_proxy:3128'https:'http://ssrf_proxy:3128'no_proxy:''allowed_env_vars:[]

proxy 必须填ssrf_proxy:3128,sandbox 在 internal 网络里没有直接外网出口,流量必须走 Squid 代理。

然后重建容器(restart 不会重读 .env):

dockercompose up-dsandbox

验证:

dockercomposeexecsandboxenv|findstr ENABLE_NETWORK# ENABLE_NETWORK=true


参考:CSDN - Dify 沙箱网络问题