FrankenPHP容器必须监听0.0.0.0:8080而非127.0.0.1:8080,否则外部请求无法进入;可通过netstat -tuln | grep :8080确认绑定地址,输出应为0.0.0.0:8080。

FrankenPHP 容器监听地址是不是 0.0.0.0?
容器内服务只绑 127.0.0.1:8080,外部请求根本进不来——Docker 端口映射再对也没用。必须确认 FrankenPHP 实际监听的是 0.0.0.0:8080 而非仅回环地址。
检查方法:进容器执行 netstat -tuln | grep :8080,输出中应为 0.0.0.0:8080;若显示 127.0.0.1:8080,说明绑定错误。
- CLI 启动时加
--addr :8080(注意前面没 IP),等效于--addr 0.0.0.0:8080 - Docker 启动时若用
-e SERVER_NAME=:8080,它只控制 Caddy 监听端口,不改变 FrankenPHP 的绑定地址;需额外确保底层 PHP-FPM 或 serve 模式监听全接口 - TOML 配置里
address = "127.0.0.1:8080"是常见坑点,得改成address = ":8080"(冒号开头)
宿主机 IPv4 转发和防火墙开了吗?
Linux 宿主机默认可能禁用 IPv4 转发,导致 Docker 的 iptables nat 规则不生效,外网流量卡在内核层。
运行 cat /proc/sys/net/ipv4/ip_forward,输出 0 就得开:echo 1 > /proc/sys/net/ipv4/ip_forward;永久生效要写入 /etc/sysctl.conf 并 sysctl -p。
立即学习“PHP免费学习笔记(深入)”;
- firewalld 用户:用
firewall-cmd --list-ports确认映射端口(如8080/tcp)是否在列表里;没开就加--permanent --add-port=8080/tcp再 reload - ufw 用户:
sudo ufw allow 8080 - 云服务器还要查安全组——很多用户只改了本地防火墙,忘了云平台那层
路由器端口转发和公网 IP 有没有被绕过?
如果你的 FrankenPHP 服务部署在家庭或办公室网络里,外网访问必须经过路由器。但多数人卡在这三步:
- 路由器“虚拟服务器”规则里,内部 IP 填的是 DHCP 分配的临时地址,重启后变了,而映射还指向旧 IP
- WAN 口 IP 是
100.64.x.x或192.168.x.x——这是运营商级 NAT(CGNAT),没有真实公网 IP,端口映射必然无效 - 测试方式错误:用手机连自家 Wi-Fi,然后浏览器输
http://你的公网IP:8080;不能用内网设备访问路由器 WAN 口 IP(即“内网穿透测试”),那走的是 NAT 回环,会误判成功
浏览器地址有没有显式带端口?
FrankenPHP 改了端口,http://localhost 这种写法永远走 :80,https://localhost 永远走 :443,和你配置的 :8080 或 :4433 完全无关。
必须写完整地址:http://192.168.1.100:8080(局域网)、http://你的公网IP:8080(外网)、https://localhost:4433(本地 HTTPS 开发)。
- Chrome 对
https://localhost强制走 443,哪怕你证书是为:4433签的,也不自动降级 -
$_SERVER['HTTP_HOST']里带端口会影响 Laravel/Symfony 生成的 URL,比如跳转链接变成https://localhost:4433/login,某些前端逻辑可能拒绝加载



















