本仓库包含一个脚本,可用于在https://hub.docker.com/_/php/%E4%B8%AD%E8%BD%BB%E6%9D%BE%E5%AE%89%E8%A3%85 PHP 扩展。
该脚本会安装所有必要的 APT/APK 包;脚本执行结束时,将移除不再需要的包,从而显著减小镜像体积。
支持的 Docker 镜像包括:
另请参见特殊要求部分中的说明。
在 Dockerfile 中使用此脚本有多种方式。
以下是安装 GD 和 xdebug PHP 扩展的 Dockerfile 示例列表:
ADD 动态下载脚本FROM php:7.2-cli
ADD --chmod=0755 https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN install-php-extensions gd xdebug
curl 动态下载脚本FROM php:7.2-cli
RUN curl -sSLf \
-o /usr/local/bin/install-php-extensions \
https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions && \
chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions gd xdebug
curl 直接执行FROM php:8.2-cli
RUN ( curl -sSLf https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - || echo 'return 1' ) | sh -s \
gd xdebug
FROM php:8.4-cli
COPY --from=ghcr.io/mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions gd xdebug
FROM php:8.4-cli
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN install-php-extensions gd xdebug
[!WARNING] 使用此方法可能会使用过时版本的 Docker 镜像。建议运行
docker pull ghcr.io/mlocati/php-extension-installer或docker pull mlocati/php-extension-installer以使用最新版本。
RUN --mount=type=bind,from=ghcr.io/mlocati/php-extension-installer:latest,source=/usr/bin/install-php-extensions,target=/usr/local/bin/install-php-extensions \
install-php-extensions gd xdebug
RUN --mount=type=bind,from=mlocati/php-extension-installer:latest,source=/usr/bin/install-php-extensions,target=/usr/local/bin/install-php-extensions \
install-php-extensions gd xdebug
[!WARNING] 使用此方法可能会使用过时版本的 Docker 镜像。建议运行
docker pull ghcr.io/mlocati/php-extension-installer或docker pull mlocati/php-extension-installer以使用最新版本。
只需在模块名称后添加-。例如:
install-php-extensions xdebug-2.9.7
脚本还支持通过在版本前添加插入符号(^)来解析兼容版本。例如:
# 安装最新的 xdebug 2.x 版本(如 2.9.8)
install-php-extensions xdebug-^2
# 安装最新的 xdebug 2.8.x 版本(如 2.8.1)
install-php-extensions xdebug-^2.8
请注意,使用上述语法将获取最新的兼容版本,该版本可能不稳定。若要安装最新的稳定版本,可添加后缀@stable:
# 安装最新的稳定版 xdebug 3.x 版本(如 3.2.2)
install-php-extensions xdebug-^3@stable
(有效的后缀包括:@snapshot、@devel、@alpha、@beta 和 @stable)
PECL 上可用的预发布版本扩展可通过在扩展名称后添加其状态(即alpha、beta、rc、preview、devel 或 snapshot)来安装。例如:
install-php-extensions xdebug-beta
提示:当 PECL 上的最新版本不稳定,而你希望保留最新稳定版本时,可通过在扩展名称后添加stable状态来强制安装。例如:
install-php-extensions mongodb-stable
你也可以从源代码安装 PHP 扩展(前提是源代码包含package.xml或package2.xml文件)。
支持的格式如下:
# 从特定提交安装(完整提交 SHA-1)
install-php-extensions php-memcached-dev/php-memcached@8f106564e6bb005ca6100b12ccc89000daafa9d8
# 从特定提交安装(简短提交 SHA-1)
install-php-extensions php-memcached-dev/php-memcached@8f106564e6bb
# 从标签 v3.2.0RC2 安装
install-php-extensions php-memcached-dev/php-memcached@v3.2.0RC2
install-php-extensions php-memcached-dev/php-memcached@refs/tags/v3.2.0RC2
# 从分支 master 安装
install-php-extensions php-memcached-dev/php-memcached@master
install-php-extensions php-memcached-dev/php-memcached@refs/heads/master
# 提交 8f106564e6bb005ca6100b12ccc89000daafa9d8 的 tgz 归档
install-php-extensions https://codeload.github.com/php-memcached-dev/php-memcached/tar.gz/8f106564e6bb005ca6100b12ccc89000daafa9d8
# 标签 v3.1.5 的 tgz 归档
install-php-extensions https://codeload.github.com/php-memcached-dev/php-memcached/tar.gz/refs/tags/v3.1.5
# 分支 master 的 tgz 归档
install-php-extensions https://codeload.github.com/php-memcached-dev/php-memcached/tar.gz/refs/heads/master
# 下载源代码
curl -o /tmp/source.tgz https://codeload.github.com/php-memcached-dev/php-memcached/tar.gz/refs/tags/v3.1.5
tar xzf /tmp/source.tgz -C /tmp
install-php-extensions /tmp/php-memcached-3.1.5
有些扩展内置在 PHP 源代码中(例如 gd 和 zip)。
其中部分扩展也可在 PECL 和/或源代码仓库中获取。
默认情况下,install-php-extensions 安装内置版本。
若要使用远程版本:
install-php-extensions zip-stable
install-php-extensions php/pecl-database-oci8@7aa1061
您还可以安装 composer,并且可以指定其主版本或完整版本。
示例:
# 安装最新版本
install-php-extensions @composer
# 安装最新的 1.x 版本
install-php-extensions @composer-1
# 安装特定版本
install-php-extensions @composer-2.0.2
| 扩展 | PHP 8.5 | PHP 8.4 | PHP 8.3 | PHP 8.2 | PHP 8.1 | PHP 8.0 | PHP 7.4 | PHP 7.3 | PHP 7.2 | PHP 7.1 | PHP 7.0 | PHP 5.6 | PHP 5.5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| amqp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| apcu | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| apcu_bc | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| ast | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| bcmath | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| bitset | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| blackfire | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| brotli | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| bz2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| calendar | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| cassandra* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| cmark | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| csv | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||
| dba | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ddtrace* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| decimal | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| ds | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| ecma_intl* | ✓ | ✓ | |||||||||||
| enchant | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ev | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| event | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| excimer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| exif | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ffi | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| ftp | ✓ | ✓ | ✓ | ✓ | |||||||||
| gd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| gearman | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| geoip | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| geos* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| geospatial | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| gettext | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| gmagick | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| gmp | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| gnupg | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| grpc | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| http | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| igbinary | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| imagick | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| imap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| inotify | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| interbase | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| intl | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ion | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||
| ioncube_loader | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| ip2location | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| jsmin | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| json_post | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| jsonpath | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| judy* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| ldap | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| luasandbox | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| lz4* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
| lzf | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
您可以通过环境变量配置脚本行为,并微调某些扩展以满足需求。
以下是示例:
IPE_LZF_BETTERCOMPRESSION=1 install-php-extensions lzf
以下是所有支持的环境变量列表:
| 扩展 | 环境变量 | 描述 |
|---|---|---|
IPE_DEBUG=1 | 设置此环境变量后,脚本将打印其执行的所有命令(输出会非常详细,仅用于调试目的) | |
IPE_INSECURE=1 | 设置此环境变量后,程序执行网络操作时将禁用HTTPS证书验证 | |
IPE_SAVE_PERMDEPS_TO=path IPE_SAVE_VOLDEPS_TO=path | 设置此环境变量后,脚本会将已安装PHP扩展所需的APT/APK包列表(IPE_SAVE_PERMDEPS_TO)和/或构建PHP扩展所需的包列表(IPE_SAVE_VOLDEPS_TO)存储到指定路径。请注意,install-php-extension可能会以其他方式配置系统(https://github.com/mlocati/docker-php-extension-installer/blob/2.9.28/install-php-extensions#L2234-L2286%EF%BC%89 | |
IPE_PROCESSOR_COUNT | 默认使用所有可用处理器。设置此环境变量可覆盖脚本检测到的处理器数量(用于并行编译) | |
IPE_DONT_ENABLE=1 | 默认情况下,脚本会安装并启用扩展。如果您只想安装扩展(不启用),可设置此环境变量。后续启用扩展可执行命令 docker-php-ext-enable-(例如:docker-php-ext-enable-xdebug)。注意:安装某些PHP扩展需要其他PHP扩展已启用,因此请谨慎使用此功能。 | |
IPE_SKIP_CHECK=1 | 默认情况下,脚本会检查扩展是否可启用;若要跳过此检查,可使用此标志。注意:扩展可能会在导致PHP崩溃的情况下仍被启用,请谨慎使用此功能。 | |
IPE_NOSTRIP=1 | 设置此环境变量后,已编译的PHP扩展将保留调试符号(对调试段错误等崩溃问题有用) | |
IPE_KEEP_SYSPKG_CACHE=1 | 默认情况下,脚本会清除apt/apk/pear缓存以节省磁盘空间。设置此环境变量可禁用缓存清除 | |
| lzf | IPE_LZF_BETTERCOMPRESSION=1 | 默认情况下,install-php-extensions编译lzf扩展时优先考虑速度而非压缩率;使用此环境变量可改为优先考虑压缩率而非速度 |
| event | IPE_EVENT_NAMESPACE=... | 默认情况下,event类定义在根命名空间中。您可使用此环境变量指定自定义命名空间 |
| gd | IPE_GD_WITHOUTAVIF=1 | 从PHP 8.1开始,gd支持AVIF格式。在Debian 11及以下版本和Alpine 3.14及以下版本中,启用AVIF需要编译libaom/libdav1d/libyuv/libavif,这非常耗时。在这些操作系统版本上,您可设置此环境变量禁用AVIF支持 |
| oci8 & pdo_oci | IPE_INSTANTCLIENT_BASIC=1 | oci8和pdo_oci PHP扩展需要Oracle Instant Client。为节省磁盘空间,我们默认安装Basic Lite版本;若要安装Basic(非精简)版本,只需设置此环境变量 |
| http, intl, mongodb | IPE_ICU_EN_ONLY=1 | 某些扩展需要ICU库,在Alpine 3.16及更高版本上,使用此标志可安装更小的仅支持英文的ICU库 |
| pspell | IPE_ASPELL_LANGUAGES='...' | 配置可用语言(例如:IPE_ASPELL_LANGUAGES='en fr')。若未指定,默认使用en |
IPE_DEB_ARCHIVE & IPE_DEB_ARCHIVE_SECURITY | 非常旧的Debian版本(如Jessie)的APT包可能已归档:您可使用这些环境变量指定这些APT归档的自定义URL | |
| newrelic | IPE_NEWRELIC_DAEMON=1 | 安装NewRelic守护进程 |
| newrelic | IPE_NEWRELIC_KEEPLOG=1 | 保留NewRelic安装的日志文件(/tmp/nrinstall-….tar) |
| newrelic | NR_INSTALL_KEY | 您的New Relic许可证密钥 |
| swoole | IPE_SWOOLE_WITHOUT_IOURING=1 | 安全专家认为io_uring内核功能不安全(参见此处和此处)。默认情况下,Swoole 6及更高版本配置了io_uring支持,使用此环境变量可跳过io_uring配置 |
| saxon | IPE_SAXON_EDITION=EE | 要使用的Saxon版本:EE表示企业版(默认),PE表示专业版,HE表示家庭版 |
提交拉取请求时,会执行一个https://github.com/mlocati/docker-php-extension-installer/blob/master/.github/workflows/test-extensions.yml%E6%9D%A5%E6%A3%80%E6%9F%A5%E5%8F%97%E5%BD%B1%E5%93%8D%E7%9A%84PHP%E6%89%A9%E5%B1%95%E6%98%AF%E5%90%A6%E5%AE%9E%E9%99%85%E5%8F%AF%E7%94%A8%EF%BC%88%E8%A7%81%E4%B8%8B%E6%96%87%EF%BC%89%E3%80%82
此外,我们还会检查PECL仓库中扩展的新版本是否仍然可用。这通过另一个https://github.com/mlocati/docker-php-extension-installer/blob/master/.github/workflows/test-recent-extensions.yml%E6%8C%89%E8%AE%A1%E5%88%92%E6%89%A7%E8%A1%8C%E3%80%82%E5%A6%82%E6%9E%9C%E5%A4%B1%E8%B4%A5%EF%BC%8C%E4%BC%9A%E5%90%91***%E9%A2%91%E9%81%93%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%E3%80%82%E6%AC%A2%E8%BF%8E%E8%AE%A2%E9%98%85%E8%AF%A5%E9%A2%91%E9%81%93%E4%BB%A5%E6%8E%A5%E6%94%B6%E5%A4%B1%E8%B4%A5%E9%80%9A%E7%9F%A5%E3%80%82
提交任何拉取请求之前,您应执行 scripts 目录中的 lint 脚本(Windows 上为 lint.bat)。
如果不这样做,且存在编码风格错误,您会看到 Check shell coding style 和/或 Check PHP coding style GitHub Action 失败。错误信息大致如下:
--- filename.orig
+++ filename
@@ -line number,7 +line number,7 @@
good line of code #1
good line of code #2
good line of code #3
- the original line with a wrong coding style
+ the line wrong coding style that has been corrected
good line of code #4
good line of code #5
good line of code #6
因此,您需要修复高亮行(line number 处的行),将 - 后面的内容替换为 + 后面的内容。
install-php-extensions 脚本data/supported-extensions 文件,添加一行新内容,包含扩展的句柄和支持的 PHP 版本列表data/special-requirements 文件中添加一行,格式为扩展句柄后接空格和 zts示例请参见https://github.com/mlocati/docker-php-extension-installer/pull/60%E3%80%82
install-php-extensions 脚本data/supported-extensions 文件,将新的 PHP 版本添加到对应扩展的现有行中示例请参见https://github.com/mlocati/docker-php-extension-installer/pull/62%E3%80%82
如果您修改的代码影响一个或多个扩展,请在拉取请求的某个提交消息中添加一行 Test: extension1, extension2。这样,即使您没有修改 data/supported-extensions 文件,测试作业也会检查这些扩展。
提交消息示例如下:
Improve the GD and ZIP extensions
Test: gd, zip
测试一次仅检查单个 PHP 扩展的安装。如果您想同时测试安装多个 PHP 扩展,请使用如下提交消息:
Improve the GD and ZIP extensions
Test: gd+zip
如果您的拉取请求包含多个提交,我们会检查每个提交的“Test:”消息。如果您想停止解析后续提交,请在“Test:”行中添加 -STOP-,例如:
Improve the GD and ZIP extensions
Test: gd, zip, -STOP-
示例请参见https://github.com/mlocati/docker-php-extension-installer/pull/43%E3%80%82
关于PHP要求和配置选项的详细信息,请参考相关文档或源码注释。
发布在PECL档案库中的PHP扩展包含一个package.xml(或package2.xml)文件,该文件描述了支持的PHP版本以及可用于编译它的选项。当我们添加对新PHP扩展的支持,以及当PHP扩展的新版本发布时,我们必须检查这些约束条件。
这是一项相当繁琐的任务,因此我开发了一个可让您轻松检查这些约束条件的项目:您可以在 https://mlocati.github.io/pecl-info 找到它(您可以在https://github.com/mlocati/pecl-info%E6%89%BE%E5%88%B0%E5%85%B6%E6%BA%90%E4%BB%A3%E7%A0%81%EF%BC%89%E3%80%82
请参见 https://github.com/mlocati/docker-php-extension-installer/blob/master/MAINTAINERS.md 文件。
您可以请我喝一杯https://github.com/***/mlocati%E6%88%96%E4%B8%80%E6%AC%A1%E6%80%A7%E5%92%96%E5%95%A1 :wink:
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务