FrankenPHP启动后访问无响应,根本原因是监听地址为127.0.0.1:8080(仅容器内可达),须改为0.0.0.0:8080并确保docker -p 8080:8080映射生效,同时验证Caddyfile正确加载及public/index.php无解析错误。

FrankenPHP 1.0 启动后访问无响应,不是服务没起来,而是请求根本没进到 PHP 层——常见于监听地址错误、端口映射断链、或入口逻辑静默失败。排查要从网络通路和执行链路两个维度同步推进。
确认 FrankenPHP 是否真在监听外部可访问地址
容器内或本地启动后 curl http://127.0.0.1:8080 成功,不代表宿主机能访问。FrankenPHP 默认监听 127.0.0.1:8080(仅限本机回环),对外不可达。
- 进容器执行:
netstat -tuln | grep :8080,输出必须含0.0.0.0:8080或*:8080;若只有127.0.0.1:8080,说明监听范围不对 - 启动时加参数强制绑定通配地址:
--address=0.0.0.0:8080(Docker)或--addr :8080(本地二进制) - 使用
frankenphp.toml配置时,确保[server] address = "0.0.0.0:8080",不能写成"127.0.0.1:8080"
验证 Docker 端口映射是否真实生效
docker ps 显示 “Up” 不代表端口转发成功。很多问题卡在映射未生效这一步。
- 运行
docker port <容器名>,应返回类似8080->8080;若无输出,说明-p参数没生效 - 检查
-p格式是否完整:必须是-p 8080:8080(host:container),不能只写-p 8080 - 避免被其他进程抢占:宿主机执行
sudo lsof -i :8080(Linux/macOS)或netstat -ano | findstr :8080(Windows WSL),确认端口空闲
检查 Caddyfile 加载与 PHP 入口是否正常执行
FrankenPHP 自带 Web 服务器,但依赖 Caddyfile 正确配置路由和 PHP 处理逻辑。配置不加载或入口脚本异常会导致 200 空响应或直接连接拒绝。
立即学习“PHP免费学习笔记(深入)”;
- 确认 Caddyfile 路径正确,并显式启动:
frankenphp run --config ./Caddyfile,不要依赖默认查找 - Caddyfile 中必须使用
php指令块(非reverse_proxy),且root指向项目public/目录 - 如果是 Symfony/Laravel,检查
vendor/bin/frankenphp-worker.php是否存在且时间新于配置修改;若未重生成,需重新运行php artisan octane:install --server=frankenphp
排除空白页背后的静默失败
页面无响应,也可能是 PHP 解析失败或错误被屏蔽,浏览器收不到任何内容。
- 在
public/index.php最顶部插入三行(必须在所有require前):ini_set('display_errors', '1');<br>ini_set('output_buffering', 'on');<br>error_reporting(E_ALL); - 用命令行测试 PHP 文件语法:
php -l public/index.php,排除 Parse Error - 访问
/metrics(若启用 Prometheus)或直接请求一个简单phpinfo()路由,确认 PHP 运行时是否真正介入



















