应选用 php:8.1-fpm-alpine 镜像标签,因其专为 fpm+nginx 架构设计,体积小、启动快、进程模型干净;需自行安装 pdo_mysql、mbstring 等常用扩展,并通过 docker-php-ext-enable 显式启用 mysqli,避免 laravel/thinkphp 连接失败。

docker-compose.yml 里配 PHP 8.1,关键不是“能不能跑”,而是“会不会被端口、挂载路径、用户权限、扩展缺失这四件事当场卡住”。
php:8.1-fpm-alpine 镜像选哪个标签?
优先用 php:8.1-fpm-alpine,别用 php:8.1-apache 或 php:8.1-cli。前者专为 FPM + Nginx 架构设计,体积小、启动快、进程模型干净;后两者要么自带 Apache(和你自己的 Nginx 冲突),要么没 FPM 进程(Nginx 转发不了)。Alpine 版本默认不带 pdo_mysql、mbstring 这些常用扩展,得自己装。
- 如果项目依赖
gd或xml,在docker-compose.yml的php服务里加build段或改用自定义Dockerfile - 纯 CLI 调试场景(如跑单元测试)可用
php:8.1-cli-alpine,但别把它当 Web 服务主体 -
php:8.1-fpm(非 Alpine)体积大、启动慢,Mac 上偶尔因 glibc 兼容性报错,不推荐
volume 挂载时路径和权限怎么对齐?
常见错误是容器内 PHP 进程(默认用户 www-data)没权限读 /var/www/html 下的文件,直接 500 或 “No input file specified”。Mac 上尤其容易踩这个坑,因为宿主机文件默认属主是你的 macOS 用户,而 Alpine 容器里没有对应 UID。
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 把代码目录挂载到
/var/www/html,而不是/usr/share/nginx/html(那是 Nginx 默认路径,PHP 不需要) - 在
php服务里加user: "82:82"(Alpine 中www-data的 UID/GID)或统一用user: "1001"并确保宿主机目录chown -R 1001:1001 ./src - 避免用
:ro只读挂载——Composer install、日志写入、缓存生成都会失败
nginx 怎么正确转发到 php:8.1-fpm?
Nginx 容器和 PHP-FPM 容器必须在同一个 Docker 网络里,且 fastcgi_pass 地址不能写 127.0.0.1:9000 ——那是 Nginx 自己的回环,不是 PHP 容器。
- 在
docker-compose.yml中让nginx服务depends_onphp,并确保它们共用networks(默认 bridge 即可) - Nginx 配置里写
fastcgi_pass php:9000(php是服务名,Docker DNS 自动解析) - 别漏掉
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;,否则index.php找不到
如何验证 PHP 8.1 环境真就绪了?
别只看 docker-compose up -d 后有没有报错。真正要确认的是:扩展装全了、时区对了、opcache 开了、能连 MySQL——这些全靠 phpinfo() 和 php -m。
- 在挂载的代码目录里放个
info.php:<?php phpinfo(); ?>,访问http://localhost:8080/info.php - 进容器执行
docker-compose exec php php -m | grep -E "(pdo|mysql|mbstring|opcache)",缺哪个就补哪个 - 时区不对?在
php服务的volumes里挂载自定义php.ini,设date.timezone = Asia/Shanghai
mysqli 扩展在 Alpine 上默认不启用,即使 docker-php-ext-install mysqli 成功了,也得手动 docker-php-ext-enable mysqli,否则 Laravel/ThinkPHP 连不上 MySQL。这个动作没法靠镜像标签解决,必须进构建流程或启动脚本里做。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










