最简可用命令是docker run -p 8080:8080 dunglas/frankenphp,它使frankenphp默认监听容器内:8080,并将宿主机8080端口映射至此;若改用宿主机80端口,则需-p 80:8080或配合-- -listen :80及-p 80:80。

必须显式用 -p 映射,且容器内监听地址、环境变量、宿主机端口三者要对齐,否则访问直接失败。
docker run 时怎么写 -p 参数
最简可用命令是:docker run -p 8080:8080 dunglas/frankenphp。它让 FrankenPHP 在容器内监听 :8080(默认行为),同时把宿主机的 8080 端口转发到容器的 8080。
- 想用宿主机
80端口?写-p 80:8080—— 注意右边仍是8080,因为镜像默认不监听:80 - 想让 FrankenPHP 主动监听
:80?得加启动参数:docker run -p 80:80 dunglas/frankenphp -- -listen :80 - 用
SERVER_NAME=:80的话,容器内监听端口固定为:80,此时-p必须写成-p 80:80,不能写-p 8080:80
SERVER_NAME 环境变量对端口映射的影响
SERVER_NAME 不是“设置端口”的配置项,而是告诉内置 Caddy:别按域名路由、别自动开 HTTPS、只起一个纯 HTTP server。它的值直接决定容器内监听地址:
-
SERVER_NAME=:80→ 容器内监听:80,-p必须配80:80 -
SERVER_NAME=:8080→ 容器内监听:8080,-p配8080:8080 -
SERVER_NAME=localhost:8080或example.com→ 无效或触发 HTTPS 流程,端口映射可能“通但不对”
host 网络模式下还用 -p 吗
不用。--network host 时容器直接用宿主机网络栈,-p 被 Docker 忽略(还会报 warning)。
- 必须显式指定监听地址:
docker run --network host dunglas/frankenphp -- -listen 0.0.0.0:8080 - 默认的
127.0.0.1:8080在 host 模式下外部无法访问,0.0.0.0才是关键 - 宿主机防火墙和云安全组仍需放行对应端口,host 模式不绕过这些
常见连不上原因排查顺序
别急着改配置,先确认这三件事:
- 运行
docker ps,看PORTS列是否显示你期望的映射,比如0.0.0.0:8080->8080/tcp - 进容器执行
ss -tlnp | grep :8080,确认监听的是0.0.0.0:8080而非127.0.0.1:8080 - 从宿主机执行
curl -v http://localhost:8080/health,返回200才算真正就绪
端口映射不是“设了就通”,FrankenPHP 的监听逻辑、Docker 的网络模型、系统防火墙是三层独立关卡,漏一不可。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











