
基于php:8.4.12-fpm-alpine3.22、node:24.9.0-alpine3.22(Node.js是许多PHP框架所需但其他多数nginx-php镜像未包含的组件)构建,并整合了nginx:alpine和richarvey/nginx-php-fpm的Docker脚本。
php8.4.1_node23.3.0版本起,添加了PHP brotli模块,移除了swoole模块(目前不支持PHP 8.4)。php8.3.6_node22.1.0版本起,添加了PHP imagick模块。php8.2.8_node20.5.0版本起,添加了PHP mongodb模块,并启用了GD模块的JPEG和FreeType支持。php8.1.8_node18.4.0版本起,添加了PHP amqp模块。php8.1.10_node18.8.0版本起,添加了PHP swoole模块。php8.1.12版本起,提供_withoutNodejs构建版本,适用于Lumen等纯PHP API框架。注意 如果从PHP 8.0升级到8.1、8.1升级到8.2、8.2升级到8.3或8.3升级到8.4,可能需要运行composer update来升级PHP包,因为某些8.0/8.1/8.2/8.3版本下的包可能不支持8.1/8.2/8.3/8.4版本。
# php -v PHP 8.4.12 (cli) (built: Aug 28 2025 18:19:24) (NTS) Copyright (c) The PHP Group Built by https://github.com/docker-library/php Zend Engine v4.4.12, Copyright (c) Zend Technologies with Zend OPcache v8.4.12, Copyright (c), by Zend Technologies # node -v v24.9.0 # nginx -v nginx version: nginx/1.29.2
此镜像包含以下PHP模块:
[PHP Modules] amqp bcmath brotli Core ctype curl date dom exif fileinfo filter gd gettext hash iconv igbinary imagick imap intl json ldap libxml mbstring memcached mongodb msgpack mysqli mysqlnd openssl pcre PDO pdo_mysql pdo_pgsql pdo_sqlite pgsql Phar posix random readline redis Reflection session SimpleXML soap sockets sodium SPL sqlite3 standard tokenizer xml xmlreader xmlwriter Zend OPcache zip zlib [Zend Modules] Zend OPcache # php -r "echo sprintf(\"GD SUPPORT %s\n\", json_encode(gd_info()));" GD SUPPORT {"GD Version":"bundled (2.1.0 compatible)","FreeType Support":true,"FreeType Linkage":"with freetype","GIF Read Support":true,"GIF Create Support":true,"JPEG Support":true,"PNG Support":true,"WBMP Support":true,"XPM Support":false,"XBM Support":true,"WebP Support":true,"BMP Support":true,"AVIF Support":false,"TGA Read Support":true,"JIS-mapped Japanese Font Support":false}
使用此Docker镜像部署Laravel 11项目的示例:
Dockerfile:
dockerfileFROM tangramor/nginx-php8-fpm # 复制源代码 COPY . /var/www/html # 如果/var/www/html下存在conf文件夹,start.sh会: # 复制conf/nginx.conf到/etc/nginx/nginx.conf # 复制conf/nginx-site.conf到/etc/nginx/conf.d/default.conf # 复制conf/nginx-site-ssl.conf到/etc/nginx/conf.d/default-ssl.conf # 复制SSL证书文件 COPY conf/ssl /etc/nginx/ssl # 中国Alpine镜像:mirrors.ustc.edu.cn ARG APKMIRROR="" # start.sh会通过$TZ设置所需时区 ENV TZ="Asia/Shanghai" # 中国PHP Composer镜像:https://mirrors.cloud.tencent.com/composer/ ENV COMPOSERMIRROR="" # 中国npm镜像:https://registry.npmmirror.com ENV NPMMIRROR="" # start.sh会将默认网站根目录从/var/www/html替换为$WEBROOT ENV WEBROOT="/var/www/html/public" # start.sh会使用Docker容器名$PHP_REDIS_SESSION_HOST作为Redis会话存储 ENV PHP_REDIS_SESSION_HOST=redis # 如果$CREATE_LARAVEL_STORAGE=1,start.sh会创建Laravel存储文件夹结构 ENV CREATE_LARAVEL_STORAGE="1" # 下载所需的node/php包, # 部分node模块需要gcc/g++编译 RUN if [[ "$APKMIRROR" != "" ]]; then sed -i "s/dl-cdn.alpinelinux.org/${APKMIRROR}/g" /etc/apk/repositories ; fi\ && apk add --no-cache --virtual .build-deps gcc g++ libc-dev make \ # 设置首选npm镜像 && cd /usr/local \ && if [[ "$NPMMIRROR" != "" ]]; then npm config set registry ${NPMMIRROR}; fi \ && npm config set registry $NPMMIRROR \ && cd /var/www/html \ # 安装node模块 && npm install \ # 安装PHP Composer包 && if [[ "$COMPOSERMIRROR" != "" ]]; then composer config -g repos.packagist composer ${COMPOSERMIRROR}; fi \ && composer install \ # 清理 && apk del .build-deps \ # 构建js/css && npm run dev \ # 设置.env && cp .env.test .env \ # 修改/var/www/html的用户/组权限 && chown -Rf nginx.nginx /var/www/html
有关start.sh的更多功能,请查看https://github.com/tangramor/nginx-php8-fpm/blob/master/start.sh%E3%80%82
以下是使用此镜像开发Laravel 11项目的示例,修改项目的docker-compose.yml文件。此处仅修改了services -> laravel.test下的image和environment字段。确保设置正确的环境参数:
yaml# 更多信息:[***] services: laravel.test: image: tangramor/nginx-php8-fpm extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' environment: TZ: 'Asia/Shanghai' WEBROOT: '/var/www/html/public' PHP_REDIS_SESSION_HOST: 'redis' CREATE_LARAVEL_STORAGE: '1' COMPOSERMIRROR: '[***] NPMMIRROR: '[***] volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql - redis - meilisearch - mailpit - selenium mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - 'sail-mysql:/var/lib/mysql' - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' networks: - sail healthcheck: test: - CMD - mysqladmin - ping - '-p${DB_PASSWORD}' retries: 3
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务