基于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 [***] 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镜像:[***] ENV COMPOSERMIRROR="" # 中国npm镜像:[***] 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的更多功能,请查看start.sh。
以下是使用此镜像开发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 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 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429