使用 Docker 部署 PHP 8.3 与 Nginx 1.26,需通过 docker-compose.yml 编排 nginx 和 php:8.3-fpm-alpine 两个服务,Nginx 以 FastCGI 方式代理至 php:9000,共享 ./src 代码目录,配置 app.conf 并启用 OPcache,端口映射为 8080,启动后访问 http://localhost:8080 即可运行 PHP 应用。

用 Docker 部署 PHP 8.3 与 Nginx 1.26,核心是让两者容器协同工作:Nginx 处理 HTTP 请求和静态资源,PHP-FPM(来自 php:8.3-fpm 镜像)执行 PHP 脚本,二者通过 FastCGI 协议通信。不推荐用 php:8.3-cli 或裸跑 php -S,必须使用 fpm 模式才能与 Nginx 正确对接。
准备基础目录结构
在宿主机新建项目目录,例如 php83-nginx,并建立以下子目录:
-
src/:存放你的 PHP 代码(如index.php) -
nginx/conf.d/:存放自定义 Nginx 虚拟主机配置(如app.conf) -
nginx/html/:可选,用于放静态文件(若全部走src/可省略) -
docker-compose.yml:主编排文件(放在根目录)
编写 Nginx 配置(app.conf)
在 nginx/conf.d/app.conf 中写入标准 PHP-FPM 代理配置:
server {
listen 80;
root /var/www/html;
index index.php;
<pre class="brush:php;toolbar:false;">location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php:9000; # 指向名为 "php" 的服务,端口 9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
# 关键:确保路径解析正确,避免 404
fastcgi_param PATH_INFO $fastcgi_path_info;
}}
注意:fastcgi_pass php:9000 依赖 docker-compose 中服务名匹配,不是 localhost 或 IP。
构建轻量 PHP 8.3-FPM 容器
直接使用官方镜像更稳妥,无需自建 Dockerfile(除非有特殊扩展需求):
- 基础镜像:用
php:8.3-fpm-alpine(体积小、启动快、适合生产) - 关键配置:挂载
src/到/var/www/html,只读模式(:ro) - 启用 OPcache:在
php.ini中设opcache.enable=1,或通过环境变量覆盖 - 运行用户:默认以
www-data启动,无需root
编写 docker-compose.yml
这是最关键的一步,定义两个服务并打通网络:
version: '3.8'
services:
nginx:
image: nginx:1.26.0
ports:
- "8080:80"
volumes:
- ./src:/var/www/html:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/html:/usr/share/nginx/html:ro
depends_on:
- php
<p>php:
image: php:8.3-fpm-alpine
volumes:</p>
- ./src:/var/www/html:ro environment:
- OPCACHE_ENABLE=1
- OPCACHE_MEMORY_CONSUMPTION=256
说明:
- Nginx 端口映射为
8080:80,避免与宿主机 80 冲突 - 两个服务共享
./src,保证代码一致性 - 未显式声明 network,Docker Compose 默认创建桥接网络,服务名可直接互通
- PHP 容器不暴露端口给宿主机,仅对 Nginx 容器内部可达
- Nginx 端口映射为
启动并验证
在项目根目录执行:
docker-compose up -d
然后检查:
-
docker-compose ps:确认两个容器状态为Up -
curl http://localhost:8080:应返回你的index.php输出(可先写<?php echo phpversion(); ?>测试) -
docker-compose logs nginx或php:排查 502 错误(常见于路径、权限或 fastcgi_pass 地址错误)
部署完成即可访问,后续只需更新 src/ 内容或调整 app.conf 即可生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











