本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
注意:这是php官方镜像的arm32v7架构构建版本的"每个架构"仓库——更多信息请参见官方镜像文档中的"非amd64架构?"和官方镜像FAQ中的"镜像源在Git中已更改,该怎么办?"。
维护者:
Docker社区
获取帮助:
Docker社区Slack、Server Fault、Unix & Linux或Stack Overflow
Dockerfile链接注意:此镜像的描述超出了Hub的25000字符限制,因此"支持的标签"列表已被删减。另请参见docker/hub-feedback#238和docker/roadmap#475。
Dockerfile链接"提交issue的位置:
[***]
支持的架构:(更多信息)
amd64、arm32v5、arm32v6、arm32v7、arm64v8、i386、mips64le、ppc64le、riscv64、s390x
已发布镜像工件详情:
repo-info仓库的repos/php/目录 (历史)
(镜像元数据、传输大小等)
镜像更新:
official-images仓库的library/php标签
official-images仓库的library/php文件 (历史)
本描述的来源:
docs仓库的php/目录 (历史)
PHP是一种主要用于Web开发的服务器端脚本语言,同时也可作为通用编程语言使用。PHP可以嵌入纯HTML中,也可与多种模板引擎和Web框架配合使用。PHP代码通常由解释器处理,该解释器既可以作为Web服务器的原生模块实现,也可以作为通用网关接口(CGI)实现。
***.org/wiki/PHP
!logo
DockerfileFROM arm32v7/php:8.2-cli COPY . /usr/src/myapp WORKDIR /usr/src/myapp CMD [ "php", "./your-script.php" ]
然后,运行以下命令构建并运行Docker镜像:
$ docker build -t my-php-app . $ docker run -it --rm --name my-running-app my-php-app
对于许多简单的单文件项目,编写完整的Dockerfile可能不太方便。在这种情况下,可以直接使用PHP Docker镜像运行PHP脚本:
$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp arm32v7/php:8.2-cli php your-script.php
许多扩展已编译到镜像中,因此在费力编译更多扩展之前,值得先检查php -m或php -i的输出。
我们提供了辅助脚本docker-php-ext-configure、docker-php-ext-install和docker-php-ext-enable,以便更轻松地安装PHP扩展。
为了保持镜像较小,PHP源代码以压缩tar文件形式保存。为便于将PHP源代码与任何扩展链接,我们还提供了辅助脚本docker-php-source,用于轻松提取tar文件或删除已提取的源代码。注意:如果使用docker-php-source提取源代码,请确保在Docker镜像的同一层中删除它。
FROM arm32v7/php:8.2-cli RUN docker-php-source extract \ # 执行重要操作 \ && docker-php-source delete
例如,如果需要带有gd扩展的PHP-FPM镜像,可以继承所需的基础镜像,并编写如下Dockerfile:
FROM arm32v7/php:8.2-fpm RUN apt-get update && apt-get install -y \ libfreetype-dev \ libjpeg62-turbo-dev \ libpng-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd
请记住,必须手动安装扩展的依赖项。如果扩展需要自定义configure参数,可以像此示例一样使用docker-php-ext-configure脚本。在这种情况下,无需手动运行docker-php-source,因为configure和install脚本会处理。
如果难以确定在docker-php-ext-install之前需要安装哪些Debian或Alpine软件包,请查看install-php-extensions项目。此脚本基于docker-php-ext-*脚本构建,通过自动添加和删除Debian(apt)和Alpine(apk)软件包,简化了PHP扩展的安装。例如,要安装GD扩展,只需运行install-php-extensions gd。此工具由社区成员贡献,未包含在镜像中,请参考其Git仓库获取安装、使用和问题解决方法。
另请参见"Dockerizing Compiled Software",了解Tianon用于确定任何软件必要构建时依赖项的技术(直接适用于编译PHP扩展)。
某些扩展默认已编译。这取决于所使用的PHP版本。在容器中运行php -m可获取特定版本的扩展列表。
有些扩展未随PHP源代码提供,而是通过PECL提供。要安装PECL扩展,使用pecl install下载并编译,然后使用docker-php-ext-enable启用:
FROM arm32v7/php:8.2-cli RUN pecl install redis-5.3.7 \ && pecl install xdebug-3.2.1 \ && docker-php-ext-enable redis xdebug
FROM arm32v7/php:8.2-cli RUN apt-get update && apt-get install -y libmemcached-dev libssl-dev zlib1g-dev \ && pecl install memcached-3.2.0 \ && docker-php-ext-enable memcached
强烈建议用户在pecl install调用中使用显式版本号,以确保PHP版本兼容性(PECL在选择要安装的扩展版本时不检查PHP版本兼容性,但在尝试安装时会检查)。除兼容性问题外,明确版本号还能确保了解依赖项何时更新并直接控制这些更新。
与PHP核心扩展不同,PECL扩展应串行安装,以便在出现问题时正确失败。否则,PECL会跳过错误。例如,使用pecl install memcached-3.2.0 && pecl install redis-5.3.7,而不是pecl install memcached-3.2.0 redis-5.3.7。但是,docker-php-ext-enable memcached redis可以在一个命令中完成。
有些扩展既不通过核心也不通过PECL提供;这些扩展也可以安装,尽管过程自动化程度较低:
FROM arm32v7/php:8.2-cli RUN curl -fsSL '[自定义PHP模块的URL]' -o module-name.tar.gz \ && mkdir -p module-name \ && sha256sum -c "[shasum值] module-name.tar.gz" \ && tar -xf module-name.tar.gz -C module-name --strip-components=1 \ && rm module-name.tar.gz \ && ( \ cd module-name \ && phpize \ && ./configure --enable-module-name \ && make -j "$(nproc)" \ && make install \ ) \ && rm -r module-name \ && docker-php-ext-enable module-name
docker-php-ext-*脚本可以接受任意路径,但必须是绝对路径(以与内置扩展名区分),因此上述示例也可写为:
FROM arm32v7/php:8.2-cli RUN curl -fsSL '[自定义PHP模块的URL]' -o module-name.tar.gz \ && mkdir -p /tmp/module-name \ && sha256sum -c "[shasum值] module-name.tar.gz" \ && tar -xf module-name.tar.gz -C /tmp/module-name --strip-components=1 \ && rm module-name.tar.gz \ && docker-php-ext-configure /tmp/module-name --enable-module-name \ && docker-php-ext-install /tmp/module-name \ && rm -r /tmp/module-name
要以任意用户运行Apache变体,有两种选择:
--sysctl net.ipv4.ip_unprivileged_port_start=0(将成为Docker未来版本的默认设置),然后--user应像对FPM那样工作。--user都应像对FPM那样工作。要以任意用户运行FPM变体,应使用docker run的--user标志(可接受容器/etc/passwd文件中的用户名/组,如--user daemon,或特定UID/GID,如--user 1000:1000)。
E: Package 'php-XXX' has no installation candidate"从docker-library/php#542开始,此镜像阻止安装Debian的PHP软件包。docker-library/php#551 (comment)中对此更改有更多讨论,要点是在此镜像中安装Debian的PHP软件包会导致单个镜像中存在两个冲突的PHP安装,这几乎肯定不是预期结果。
对于因此更改而遇到问题并寻求临时解决方法的用户,在开发适当修复时,向Dockerfile添加以下行可移除阻止(强烈警告:这将允许安装第二个PHP版本,除非确实了解后果,否则不建议这样做):
RUN rm /etc/apt/preferences.d/no-debian-php
此错误的正确解决方法是:要么使用FROM debian:XXX并直接安装Debian的PHP软件包,要么使用docker-php-ext-install、pecl和/或phpize安装必要的其他扩展和工具。
此镜像附带默认的php.ini-development和php.ini-production配置文件。
强烈建议在生产环境中使用的镜像使用生产配置!
可以通过将配置文件复制到$PHP_INI_DIR/conf.d/目录来自定义默认配置。
FROM arm32v7/php:8.2-fpm-alpine # 使用默认生产配置 RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
在许多生产环境中,还建议(构建并)启用PHP核心OPcache扩展以提高性能。有关更多详细信息,请参见上游OPcache文档。
arm32v7/php镜像有多种版本,每种版本设计用于特定用例。
某些标签可能包含bookworm或trixie等名称,这些是Debian发行版的代号,表示镜像所基于的发行版。如果镜像需要安装超出镜像自带的其他软件包,可能需要显式指定这些代号,以最大程度减少Debian新版本发布时的中断。
arm32v7/php:<version>-cli此变体包含PHP CLI工具及默认模块。如果需要Web服务器,这可能不是您要找的镜像。它设计为既可作为临时容器(挂载源代码并启动容器以运行应用),也可作为构建其他镜像的基础。
它也是唯一包含(不推荐使用的)php-cgi二进制文件的变体,这对于某些工具(如PPM)可能是必需的。
注意,arm32v7/php的所有变体都包含PHP CLI(/usr/local/bin/php)。
arm32v7/php:<version>-apache此镜像包含Debian的Apache httpd,结合PHP(作为mod_php),默认使用mpm_prefork。
Dockerfile的ApacheFROM arm32v7/php:7.2-apache COPY src/ /var/www/html/
其中src/是包含所有PHP代码的目录。然后,运行以下命令构建并运行Docker镜像:
$ docker build -t my-php-app . $ docker run -d --name my-running-app my-php-app
建议添加php.ini配置文件;详情参见"配置"部分。
Dockerfile的Apache$ docker run -d -p 80:80 --name my-apache-php-app -v "$PWD":/var/www/html arm32v7/php:7.2-apache
DocumentRoot(或其他Apache配置)某些应用可能希望更改Apache中的默认DocumentRoot(从/var/www/html)。以下演示了一种使用环境变量的方法(也可在容器运行时修改):
FROM arm32v7/php:7.1-apache ENV APACHE_DOCUMENT_ROOT /path/to/new/root RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
类似技术可用于其他Apache配置选项。
arm32v7/php:<version>-fpm此变体包含PHP的FastCGI进程管理器(FPM),这是PHP推荐的FastCGI实现。
要使用此镜像变体,需要某种反向代理(如NGINX、Apache或其他支持FastCGI协议的工具)。
一些可能有用的资源:

免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429