直接挂载PHP 8.2项目目录的核心是:选php:8.2-apache镜像、-v映射到/var/www/html、确保index.php存在且权限可读;挂错路径或权限不足会导致空白页或403错误。

直接挂载 PHP 8.2 项目目录,核心就三件事:选对镜像、路径映射正确、确保文件可被 Web 服务读取。用 php:8.2-apache 镜像 + -v 挂载是最简通路,但挂载错位置或权限不对,页面就空白或 403。
挂载路径必须对应 Apache DocumentRoot
官方 php:8.2-apache 镜像的 Apache 默认根目录是 /var/www/html。挂载时必须把本地代码目录映射到这个路径,否则 Apache 找不到 index.php。
- ✅ 正确:
docker run -v $(pwd):/var/www/html php:8.2-apache - ❌ 错误:
docker run -v $(pwd):/app php:8.2-apache(Apache 不会去/app查找文件) - ⚠️ 注意:Linux/macOS 用
$(pwd),Windows PowerShell 用${PWD},CMD 用%cd%
挂载后访问空白页?先检查文件是否存在且可读
空白页不是 PHP 报错,而是 Apache 返回空响应——通常因为 /var/www/html 下压根没文件,或文件权限被拒绝。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 确认当前目录下有
index.php,哪怕只写<?php echo 'ok'; ?> - 挂载后进容器看一眼:
docker exec -it <容器名> ls -l /var/www/html,确保文件列出且非 root-only 权限 - 如果本地是 Windows,注意换行符和文件权限继承问题;可加
:ro测试是否为写权限干扰(-v $(pwd):/var/www/html:ro)
多服务协作时,挂载路径要统一
用 php:8.2-fpm + Nginx 组合时,PHP 容器和 Nginx 容器必须挂载同一宿主机路径,否则代码修改不实时同步。
立即学习“PHP免费学习笔记(深入)”;
- PHP-FPM 容器:
-v $(pwd)/src:/var/www/html - Nginx 容器:
-v $(pwd)/src:/usr/share/nginx/html(同时配root /usr/share/nginx/html;) - ⚠️ 别让一个挂
/src,另一个挂/www——改代码后只有其中一个能热更新 - 两个容器还必须在同一个自定义 Docker 网络里,才能通过容器名通信(如
fastcgi_pass php:9000)
最易被忽略的是挂载后文件属主问题:Apache 进程默认以 www-data 用户运行,若宿主机文件属主是 root 或 UID 不匹配,可能触发 403;开发阶段可临时加 --user www-data 启动容器验证,但生产环境应统一 UID/GID 映射。


















