docker port查不到端口说明端口映射根本未配置,即启动时缺失-p参数或docker-compose.yml中漏写ports字段,此时应优先检查docker ps输出的PORTS列是否为空,而非排查防火墙。

docker port 命令查不到端口,说明映射根本没生效
FrankenPHP 容器启动后,docker port 查不到任何输出,或只显示空行,基本可以断定:容器启动时压根没加 -p 参数,或者 docker-compose.yml 里漏写了 ports 字段。这时候防火墙检查是徒劳的——连映射都不存在,流量根本到不了宿主机端口。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 运行
docker ps --format "table {{.Names}}\t{{.Ports}}" | grep franken,确认 Ports 列是否为空或为0.0.0.0:<port>-><container_port>/tcp - 如果为空,立刻检查启动命令:是否用了
-p 8080:80;如果是 Compose,确认services.php.ports下有明确条目,且不是写在environment或expose里(expose只对内部网络有效,不触发宿主机端口绑定) - FrankenPHP 默认监听
80(HTTP)或443(HTTPS),但你必须显式映射到宿主机端口,比如-p 8080:80,否则外部无法触达
telnet 或 curl 能连通,但浏览器打不开,先看防火墙
当 docker port 显示 0.0.0.0:8080->80/tcp,且 curl -v http://localhost:8080 返回 FrankenPHP 的响应头(如 X-Powered-By: FrankenPHP),说明容器和 Docker 网络层正常;但如果从局域网其他机器访问 http://<host_ip>:8080 失败,大概率是系统防火墙拦截了。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- Ubuntu/Debian 上执行
sudo ufw status verbose,确认8080(或你映射的实际端口)在ALLOW列表中;若未出现,运行sudo ufw allow 8080 - CentOS/RHEL 8+ 执行
sudo firewall-cmd --list-ports,若无输出或不含目标端口,运行sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload - 云服务器(如阿里云、AWS)额外检查安全组规则——Docker 自身不管理云平台防火墙,必须手动放行对应端口
ss -tuln 看不到 LISTENING,说明端口没被 Docker 绑定
ss -tuln | grep :8080 没输出,或只看到 127.0.0.1:8080(而非 0.0.0.0:8080),意味着 Docker 没把端口绑定到所有接口。常见原因是启动时用了 -p 127.0.0.1:8080:80,这会限制仅本地回环可访问,外部请求直接被拒。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 改用
-p 8080:80(等价于-p 0.0.0.0:8080:80),避免指定 IP 前缀 - 若必须限定监听地址,确保用的是宿主机真实网卡 IP(如
192.168.1.100),而不是127.0.0.1 - FrankenPHP 容器内无需额外配置监听地址——它默认 bind to
0.0.0.0:80,重点在 Docker 映射层是否放开
docker inspect 看 Ports 字段为空,别急着动防火墙
运行 docker inspect frankenphp-container | jq '.[0].NetworkSettings.Ports'(或去掉 jq 直接看),如果返回 {} 或 null,说明容器创建时未声明端口映射。此时无论防火墙开不开,端口都不可能通。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 不要尝试重启容器来“碰运气”,先确认启动方式:是
docker run -d --name frankenphp -p 8080:80 ...还是docker-compose up?后者需检查ports是否缩进正确、是否被 YAML 注释误吞 - 临时验证:删掉旧容器(
docker rm -f frankenphp),用最简命令重跑:docker run -d --name frankenphp -p 8080:80 dunglas/frankenphp,再立刻docker port frankenphp - FrankenPHP 镜像本身不带 SSH 或 netstat,无法进容器查
lsof -i :80——验证端口暴露必须从宿主机侧入手
ufw 或改安全组,却忽略了 docker ps 输出里 Ports 列是不是空的——这个细节比所有防火墙命令都优先。



















