html
容器状态为 healthy 仅表示健康检查通过(如数据库可连、API服务进程存活),不等价于 Web 服务已就绪对外提供 HTTP 响应。首先执行:
curl -v http://localhost:3000/health
若返回 Connection refused,说明本地 3000 端口未被监听;若返回 Failed to connect 但无响应,则需排查端口绑定与网络栈。同时运行 netstat -an | grep :3000(Linux/macOS)或 netstat -ano | findstr :3000(Windows)确认端口占用情况。
Dify 的 .env 文件中 WEB_PORT=3000 必须与 docker-compose.yml 中的端口映射严格对齐:
.env 中
WEB_PORT
WEB_PORT=3000
WEB_PORT=8080(未同步改 compose)
docker-compose.yml ports
- "3000:3000"
- "3000:8080"(容器内未监听 3000)
注意:Dify Web 容器默认监听 0.0.0.0:3000,若 WEB_PORT 被修改,必须同步更新 ports 和容器内应用配置(如 Next.js 的 NEXT_PUBLIC_API_BASE_URL)。
该过程通常需 60–120 秒。建议持续观察日志流:
docker-compose logs -f web | grep -E "(listening|ready|health|error)"
关键成功信号为:info - ready on http://localhost:3000 或 Server listening on 0.0.0.0:3000。
在 Windows/macOS 上,Docker Desktop 依赖 WSL2(Windows)或 HyperKit(macOS)虚拟化层。常见故障链如下:
验证命令:docker info | grep -i wsl(Windows)、docker network inspect bridge | grep Gateway(确认网关可达)。
企业环境常部署终端防护软件(如 CrowdStrike、McAfee)或 Windows Defender 防火墙,默认阻止非白名单端口入站。执行以下命令验证:
- Windows:
Get-NetFirewallRule | Where-Object {$_.LocalPort -eq 3000} | Select-Object Name,Enabled,Direction - macOS:
sudo pfctl -sr | grep 3000 - 临时放行测试:
sudo ufw allow 3000(Ubuntu)
注意:Docker 的 host 网络模式绕过 NAT,但 Dify 默认使用 bridge,因此宿主防火墙仍需放行映射端口。
若弃用 docker-compose 改用 docker run,极易遗漏关键参数:
# ❌ 错误:未暴露端口,容器内虽监听 3000,但宿主不可达
docker run -d –name dify-web ghcr.io/langgenius/dify-web:latest
✅ 正确:显式端口映射 + 依赖网络 + 环境变量注入
单容器部署还需手动构建跨容器通信网络(docker network create dify-network),否则 web 容器无法解析 api 服务名。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/257470.html