本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com
📦 简化的PHP Docker镜像,支持轻松定制和扩展设置。
本PHP Docker镜像基于官方PHP Docker镜像构建,支持PHP 5.6至8.5(beta)版本,提供CLI、ZTS、FPM、FPM/Apache2、FPM/Nginx、RoadRunner和FrankenPHP等多种变体,同时提供Debian和Alpine两种基础版本。
核心优势包括:
适用场景:快速搭建PHP开发环境、生产环境部署、多版本PHP项目兼容、需要灵活配置PHP参数的场景。
cli、zts、fpm、fpm-nginx、fpm-apache、roadrunner(PHP ≥8.0)、frankenphp(PHP ≥8.2,beta)PHP_*环境变量直接自定义php.ini和php-fpm.conf参数(如PHP_DISPLAY_ERRORS=1)ALLOW_RUNTIME_PHP_ENVVARS=1)APP_PATH)和文档根目录(DOCUMENT_ROOT)phpaddmod命令一键安装额外扩展(如phpaddmod imagick xdebug),自动处理依赖和配置onboot、first-run、migration等多种钩子脚本,定制容器生命周期行为/startup/目录下的脚本会按文件名顺序自动执行ENABLE_CRONTAB=1启用crontab服务,支持环境变量定义任务APP_USER、APP_UID等环境变量自定义容器内用户和组| 场景 | 推荐变体 | 核心优势 |
|---|---|---|
| PHP命令行工具开发 | cli、zts | 轻量、支持多PHP版本 |
| 生产环境Web服务 | fpm-nginx、fpm-apache | 稳定、预配置Web服务器、支持动态PHP配置 |
| 高性能API服务 | roadrunner、frankenphp | 基于Go的高性能服务器,适合长连接场景 |
| 多版本PHP项目兼容测试 | 全变体 | 覆盖5.6至8.5版本,满足 legacy 项目需求 |
| 需要自定义PHP扩展的项目 | 全变体 | phpaddmod工具简化扩展安装 |
| 开发环境快速搭建 | fpm-nginx、fpm-apache | 预安装Composer和Web服务器,开箱即用 |
镜像标签格式为shinsenter/php:[PHP版本]-[变体],支持以下变体:
| 变体 | 说明 | PHP版本要求 |
|---|---|---|
cli | 命令行模式 | 5.6+ |
zts | 线程安全模式 | 5.6+ |
fpm | PHP-FPM模式 | 5.6+ |
fpm-apache | PHP-FPM + Apache2服务器 | 5.6+ |
fpm-nginx | PHP-FPM + Nginx服务器 | 5.6+ |
roadrunner | 集成RoadRunner服务器(基于Go的高性能应用服务器) | 8.0+ |
frankenphp | 集成FrankenPHP服务器(基于Caddy的PHP运行时,beta版) | 8.2+ |
示例标签:
shinsenter/php:7.4-cli(PHP 7.4,CLI模式)shinsenter/php:8.1-fpm-nginx(PHP 8.1,FPM+Nginx)shinsenter/php:8.3-roadrunner(PHP 8.3,RoadRunner)shinsenter/php:8.4-frankenphp(PHP 8.4,FrankenPHP)所有标签可在Docker Hub查看。
# 非交互式运行(查看PHP模块) docker run --rm shinsenter/php:8.4-cli php -m # 交互式运行(挂载本地项目) docker run -it -v ./myproject:/var/www/html shinsenter/php:8.4-cli
docker run -v ./myproject:/var/www/html -p 9000:9000 shinsenter/php:8.4-fpm
# FPM+Nginx(映射80/443端口) docker run -v ./myproject:/var/www/html -p 80:80 -p 443:443 shinsenter/php:8.4-fpm-nginx # FPM+Apache docker run -v ./myproject:/var/www/html -p 80:80 -p 443:443 shinsenter/php:8.4-fpm-apache
version: '3' services: web: image: shinsenter/php:8.4-fpm-nginx ports: - "80:80" - "443:443" volumes: - ./myproject:/var/www/html environment: PHP_DISPLAY_ERRORS: "1" # 显示错误信息 PHP_POST_MAX_SIZE: "100M" # 最大POST大小 PHP_UPLOAD_MAX_FILESIZE: "100M" # 最大上传文件大小 APP_PATH: "/var/www/html" # 应用目录(默认) DOCUMENT_ROOT: "public" # 文档根目录(相对于APP_PATH)
通过PHP_*环境变量自定义php.ini或php-fpm.conf参数,命名规则为:PHP_ + 配置项的常量名(原配置项中的点/横杠替换为下划线,大写)。
| 环境变量 | 说明 | 对应PHP配置项 |
|---|---|---|
PHP_DISPLAY_ERRORS=1 | 开发环境显示错误 | display_errors = 1 |
PHP_POST_MAX_SIZE=100M | 最大POST数据大小 | post_max_size = 100M |
PHP_UPLOAD_MAX_FILESIZE=100M | 最大上传文件大小 | upload_max_filesize = 100M |
PHP_SESSION_COOKIE_HTTPONLY=1 | 会话Cookie启用HttpOnly标志 | session.cookie_httponly = 1 |
PHP_MEMORY_LIMIT=512M | PHP内存限制 | memory_limit = 512M |
命令行:
docker run \ -v ./myproject:/var/www/html \ -e PHP_DISPLAY_ERRORS='1' \ -e PHP_POST_MAX_SIZE='100M' \ shinsenter/php:8.4-fpm-nginx
运行时动态调整配置:
默认PHP_*变量仅在容器启动时生效,若需在容器内运行命令时动态调整,需设置ALLOW_RUNTIME_PHP_ENVVARS=1:
docker run -e ALLOW_RUNTIME_PHP_ENVVARS=1 shinsenter/php:8.4-cli # 容器内执行:PHP_DISPLAY_ERRORS=1 php -i | grep display_errors
/var/www/html,可通过APP_PATH环境变量自定义。APP_PATH的子目录(默认空,即APP_PATH本身),可通过DOCUMENT_ROOT自定义。示例:
# 将应用目录设置为/app,文档根目录为/app/public docker run \ -v ./myproject:/app \ -e APP_PATH=/app \ -e DOCUMENT_ROOT=public \ -p 80:80 \ shinsenter/php:8.4-fpm-nginx
使用phpaddmod命令一键安装PHP扩展,自动处理依赖、编译和配置。该命令是mlocati/docker-php-extension-installer的封装,支持大部分主流扩展。
FROM shinsenter/php:8.4-fpm-nginx # 安装imagick、swoole、xdebug扩展 RUN phpaddmod imagick swoole xdebug # 复制项目代码(指定用户权限) ADD --chown=$APP_USER:$APP_GROUP ./myproject/ /var/www/html/
支持的扩展列表参考:mlocati/docker-php-extension-installer文档
通过环境变量自定义容器内运行应用的用户和组,避免权限问题。
| 环境变量 | 说明 | 默认值 |
|---|---|---|
APP_USER | 用户名 | www-data |
APP_GROUP | 组名 | www-data |
APP_UID | 用户UID | 容器内默认UID |
APP_GID | 组GID | 容器内默认GID |
示例:
# docker-compose.yml services: web: image: shinsenter/php:8.4-fpm-nginx environment: APP_USER: "myapp" # 自定义用户名 APP_UID: "5000" # 自定义UID(与宿主机用户匹配可避免权限问题)
钩子脚本用于在容器生命周期的特定阶段执行自定义逻辑,支持以下钩子:
| 钩子名称 | 触发时机 | 典型用途 |
|---|---|---|
onboot | 容器启动或重启时 | 发送启动通知 |
first-run | 容器首次启动时(仅一次) | 初始化数据库 |
rebooted | 容器重启时 | 检查崩溃日志 |
migration | 应用启动前 | 执行数据库迁移 |
onready | migration后,应用准备就绪时 | 预热缓存 |
onlive | Web服务器启动后(若包含Web服务器) | 触发外部webhook |
在APP_PATH目录下创建hooks文件夹,添加与钩子名称同名的可执行脚本(或子目录中的脚本):
/var/www/html/ └── hooks/ ├── first-run # 首次启动执行 ├── migration # 迁移脚本 └── onlive/ # onlive钩子的多个脚本 ├── 01-webhook └── 02-notify
提示:设置
DEBUG=1可查看钩子执行日志。
/startup/目录下的shell脚本会在容器启动时按文件名顺序自动执行,用于初始化项目(如数据库迁移、依赖安装等)。
Dockerfile中添加脚本:
FROM shinsenter/php:8.4-cli # 添加自动运行脚本(确保可执行权限) ADD ./scripts/00-migration /startup/00-migration RUN chmod +x /startup/00-migration
禁用自动运行:
设置环境变量DISABLE_AUTORUN_SCRIPTS=1。
启用crontab服务需设置ENABLE_CRONTAB=1,任务定义可通过以下方式添加:
CRONTAB_DIR(默认/etc/crontab.d)CRONTAB_SETTINGS环境变量直接定义(适合docker-compose)| 环境变量 | 说明 | 默认值 |
|---|---|---|
ENABLE_CRONTAB=1 | 启用crontab服务 | 未设置(禁用) |
CRONTAB_DIR | 任务文件目录 | /etc/crontab.d |
CRONTAB_HOME | 任务执行的HOME目录 | $APP_PATH |
CRONTAB_SETTINGS | 直接定义任务(换行分隔多个任务) | 未设置 |
CRONTAB_TZ | 任务时区 | $TZ(默认UTC) |
docker-compose.yml:
services: web: image: shinsenter/php:8.4-fpm-nginx environment: ENABLE_CRONTAB: "1" CRONTAB_TZ: "Asia/Shanghai" CRONTAB_SETTINGS: | * * * * * echo "每分钟执行" >> /var/log/cron.log 0 0 * * * php /var/www/html/artisan backup # 每日凌晨执行备份
通过SUPERVISOR_PHP_COMMAND环境变量自定义容器启动命令,替代默认Web服务器或FPM进程。
示例:
# 使用PHP内置Web服务器运行项目 docker run \ -e SUPERVISOR_PHP_COMMAND='php -S 0.0.0.0:80 index.php' \ shinsenter/php:8.4
镜像使用msmtp替代sendmail,支持通过SMTP发送邮件。若使用PHP mail()函数,需配置以下环境变量:
| 环境变量 | 说明 | 示例值 |
|---|---|---|
SMTP_HOST | SMTP服务器地址 | smtp.gmail.com |
SMTP_PORT | SMTP端口 | 587 |
SMTP_USER | SMTP认证用户名 | *** |
SMTP_PASSWORD | SMTP认证密码 | password |
SMTP_FROM | 发件人邮箱 | *** |
SMTP_AUTH=on | 启用SMTP认证 | on |
SMTP_TLS=on | 启用TLS加密 | on |
开发环境示例(使用Mailpit容器作为SMTP服务器):
version: '3' services: web: image: shinsenter/php:8.4-fpm-nginx environment: SMTP_HOST: mailpit SMTP_PORT: 1025 mailpit: image: axllent/mailpit ports: - "8025:8025" # Web管理界面
设置DEBUG=1启用详细日志输出,便于排查配置或启动问题:
docker run -e DEBUG=1 shinsenter/php:8.4-fpm-nginx
| 环境变量 | 默认值 | 说明 |
|---|---|---|
TZ | UTC | 容器时区(如Asia/Shanghai) |
INITIAL_PROJECT | 未设置 | 若应用目录为空,自动创建Composer项目(如laravel/laravel)或拉取Git仓库 |
COMPOSER_OPTIMIZE_AUTOLOADER=1 | 未设置 | Composer安装时启用--optimize-autoloader,优化生产环境性能 |

免费版仅支持 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