php 8.5尚未发布,当前最新稳定版是php 8.3,8.4处于rc阶段;官方docker镜像仅支持php:8.3-apache等,不存在正式版php:8.5。

PHP 8.5 还没发布,别被版本号带偏了
PHP 8.5 目前(截至 2024 年中)并不存在——官方最新稳定版是 PHP 8.3,PHP 8.4 处于 alpha 阶段,预计 2024 年底发布。所谓“PHP 8.5”通常是误传、测试分支名或镜像标签混淆(比如有人把自建的 php:8.5-dev 当成正式版)。直接拉取 php:8.5 镜像会失败或命中非官方/不可信源。
真正能用的 Docker 官方镜像只到 php:8.3(stable)和 php:8.4-rc(候选版)。搭环境前先确认你到底要什么:
- 要生产级稳定?选
php:8.3-apache或php:8.3-cli - 想尝鲜新特性且接受 break change?用
php:8.4RC-apache,但别上生产 - 看到别人写了
8.5?大概率是本地Dockerfile里手写的FROM php:8.5,实际构建会报manifest unknown
用官方镜像搭 PHP + Apache 开发环境最简路径
不推荐自己从 debian:bookworm 一层层装 PHP,容易漏扩展、配错 php.ini、权限出问题。官方 php:8.3-apache 已预装 apache2、mod_rewrite 和常用扩展(pdo_mysql、opcache 等),开箱即用。
一个可直接跑起来的 docker-compose.yml 示例:
立即学习“PHP免费学习笔记(深入)”;
version: '3.8'
services:
app:
image: php:8.3-apache
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./php.ini:/usr/local/etc/php/php.ini
environment:
TZ: Asia/Shanghai注意几个硬性要点:
-
./src必须存在且有index.php,否则 Apache 返回 403 -
php.ini是可选的,但建议挂载——官方镜像默认关闭display_errors,开发时得手动打开 - 别改
/var/www/html权限:官方镜像用www-data用户跑 Apache,宿主机文件 uid 不匹配会导致 500 错误;用chown -R 33:33 ./src(33 是 www-data uid)更稳妥
扩展装不上?先看镜像类型再动手
官方 PHP 镜像分三类:-cli(纯命令行)、-apache(带 Apache)、-fpm(只跑 PHP-FPM)。扩展安装方式完全不同:
-
php:8.3-cli和php:8.3-apache:用docker-php-ext-install,比如装gd:docker-php-ext-install gd -
php:8.3-fpm:同上,但必须配合 Nginx 使用,不能单独暴露端口 - 所有镜像都不支持
pecl install直接装未打包扩展(如xlswriter),得先apt-get update && apt-get install -y libzip-dev补依赖
常见翻车点:
- 在
-fpm镜像里装apache2模块——根本没用,FPM 不走 Apache - 用
apt install php-gd:官方镜像没启用 Debian 的 PHP 包仓库,只会报Package 'php-gd' has no installation candidate - 装完扩展不重启容器:Docker 容器里 PHP 进程不会自动 reload,必须
docker-compose restart app
为什么你的 Xdebug 总连不上 IDE?
PHP 8.3+ 官方镜像默认不带 Xdebug,得自己装。但装完只是第一步,IDE 连不上多半卡在三个地方:
-
xdebug.mode=debug必须显式设置,8.3 默认是off,光开xdebug.start_with_request=yes没用 -
xdebug.client_host不能写localhost:Docker 容器里 localhost 指自己,得写宿主机网关,Mac/Linux 用host.docker.internal,Windows WSL2 需额外配置 - IDE 的 Debug 端口(默认 9003)要映射出来:
ports: ["9003:9003"],否则请求根本进不到容器
最小可用 Xdebug 配置(加到挂载的 php.ini 里):
; xdebug zend_extension=xdebug.so xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9003 xdebug.log=/tmp/xdebug.log
日志文件 /tmp/xdebug.log 很关键——连不上时直接 docker exec -it app cat /tmp/xdebug.log,比猜强十倍。
版本错位、路径写死、网络假设错误,这三样占了 PHP Docker 开发环境 80% 的调试时间。别急着换工具,先确认你用的到底是哪个 PHP 版本,以及它到底运行在什么上下文里。











