FrankenPHP 1.0 支持三种扩展安装方式:官方镜像用 install-php-extensions 一键安装常规扩展;自建静态镜像需在 Dockerfile 中用 docker-php-ext-install 编译;还可通过 Go 语言编写原生扩展,用 //export_php 注释导出函数并自动注册。

FrankenPHP 1.0 安装自定义 PHP 扩展,关键看你是用官方镜像还是自建镜像,以及扩展类型(常规扩展 or Go 编写的 FrankenPHP 原生扩展)。
用官方镜像(dunglas/frankenphp)装常规 PHP 扩展
官方生产镜像已预装 docker-php-extension-installer 工具,支持一键安装常见扩展:
- 进入容器:
docker exec -it your-frankenphp-container bash - 执行安装命令,例如:
install-php-extensions opcache pdo_mysql mbstring curl zip - 安装完成后建议重启容器,避免扩展未加载或配置未生效
- 若提示
command not found,说明你没使用dunglas/frankenphp镜像——可能是基于scratch、alpine或static-builder自建的精简版
多阶段构建中静态安装(如 static-builder-musl)
这类镜像不含 install-php-extensions,必须在 Dockerfile 构建阶段显式调用 docker-php-ext-install:
- 基础镜像需选带构建工具的版本,例如:
FROM dunglas/frankenphp:static-builder-musl - 在
RUN指令中安装扩展:RUN docker-php-ext-install opcache pdo_mysql mbstring - 不支持
pecl install,因为static-builder镜像默认不包含pecl或pear - 注意:gd、imagick 等大体积扩展会显著增大镜像体积,且 musl 环境下易因缺少系统库而编译失败
用 Go 编写并集成 FrankenPHP 原生扩展
这是 FrankenPHP 1.0 的特色能力:无需 C 语言,直接用 Go 实现 PHP 函数,并编译进运行时:
立即学习“PHP免费学习笔记(深入)”;
- 新建 Go 模块,引入
github.com/dunglas/frankenphp - 用
//export_php:function func_name(...)注释声明 PHP 可见函数 - 通过
frankenphp.GoString()和frankenphp.PHPString()完成 PHP 字符串与 Go 字符串的双向转换 - 其他类型有对应转换方式:int →
int64,bool 直接传,array →frankenphp.AssociativeArray - 构建后生成的二进制会自动注册为 PHP 扩展,PHP 侧调用方式与 C 扩展完全一致
别忘了 php.ini 配置生效
FrankenPHP 默认加载 $PHP_INI_DIR/php.ini,但初始是 php.ini-production,部分扩展(如 opcache)依赖 ini 设置才能启用:
- 检查
opcache.enable=1、extension=pdo_mysql等是否已开启 - 可通过挂载自定义
php.ini文件覆盖默认配置 - 修改后需重启容器,PHP 运行时才会重新读取并加载扩展



















