选独立二进制还是docker镜像取决于交付对象、运行环境和责任边界:无docker环境(如政府单位、边缘设备)适用单二进制,已具k8s/ci/cd体系的客户则应交付docker镜像。

选独立二进制还是 Docker 镜像,取决于你面对的是谁、在哪跑、出了问题谁来兜底——不是技术优劣,而是责任边界。
客户现场交付没 Docker?直接上 frankenphp-linux-x86_64
政府单位、制造业产线、边缘设备这类环境,常见限制包括:不能装 Docker、禁止 systemd、只允许放一个可执行文件到指定目录、由客户自己的守护脚本拉起进程。这时候交 Docker 镜像等于交一张废纸。
-
frankenphp二进制本身就能监听端口、自动签 HTTPS、托管静态资源、执行 PHP —— 客户只要chmod +x myapp然后./myapp --config caddyfile就能跑 - 必须确认目标机器有 glibc(或 musl)支持,且能绑定 80/443 端口;若不行,得改 Caddyfile 用非特权端口(如 8080)
- 别把
.git、node_modules、tests/打进二进制,体积暴涨不说,还可能泄露敏感信息;构建前先composer install --no-dev --optimize-autoloader - 构建依赖 Docker(即使目标是 Linux,也得用容器交叉编译),本地没 Docker 就没法做;
EMBED=dist/app/路径必须精确,漏掉vendor/或.env就启动失败
客户已有 K8s/CI/CD 流水线?交 dunglas/frankenphp 镜像
中大型企业、SaaS 平台、云原生团队,他们不关心你用什么技术,只认三件事:能不能用 docker pull 拉下来、能不能塞进他们的镜像扫描流程、出问题时日志和健康检查是否走标准接口。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 官方镜像基于
scratch或 Alpine,体积小、攻击面少;Trivy可扫漏洞,syft可生成 SBOM,单二进制做不到 - 配置靠环境变量注入(如
SERVER_NAME、FRANKENPHP_CONFIG),不用重构建镜像;docker run -e ENV=prod比改 Caddyfile 更易对接发布平台 - 别在生产镜像里加
--cap-add=SYS_PTRACE—— 这是构建阶段调试用的,运行时用FROM dunglas/frankenphp:1.2.0官方 tag 就行 - 挂载项目目录时,
-v $PWD:/app必须指向 Laravel/Symfony 项目根目录,不是public/子目录;否则报file not found: /app/public/index.php
frankenphp php-server 只适合临时验证,别当正式方案
这个命令本质是绕过 Caddy 的裸 PHP 启动器:监听 127.0.0.1:8000、无 TLS、无路由重写、无静态文件缓存策略、无进程管理。它连 .htaccess 都不处理,更别说 HTTP/3 或自动证书。
- 适合场景:本地快速测一段 PHP 脚本、CI 中跑单元测试前的轻量服务启动
- 和 Docker 镜像行为不一致——镜像内走完整 Caddy 栈,而
php-server直接调 PHP SAPI,中间缺了一整层 Web 层能力 - 生产环境用它,等于把 Nginx 配置全删了只留
php -S,性能和稳定性都不可控
真正容易被忽略的点是:交付物背后的责任链。单二进制交付后,客户机器上出 segfault,你得自己看 core dump;Docker 镜像交付后,客户说“容器起不来”,第一反应是查 docker logs 和 docker inspect —— 工具链、排查路径、协作界面全不一样。选哪个,本质是在选你愿意承担哪条排障路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










