
怎么确认 php:8.5 镜像是否存在
PHP 官方 Docker 镜像目前(截至 2024 年中)**没有 php:8.5 标签**。PHP 8.5 尚未发布,PHP 官方镜像仓库只提供已发布的稳定版本,最新正式版是 php:8.3,php:8.4 处于 RC 阶段但未进 latest,更不存在 php:8.5。
如果你看到别人用了 php:8.5,大概率是以下几种情况之一:
- 本地手动构建的测试镜像,tag 被人为打成了
8.5 - 第三方镜像(比如
bitnami/php或私有 registry),但非官方、无长期维护保障 - 配置写错了,本意是
php:8.2或php:8.3,手误多输了一位
用 php:8.3 部署 Laravel 应用的实际步骤
以最常见场景——Laravel + Nginx + MySQL 组合为例,用官方 php:8.3-apache 是稳妥选择。它预装了 Apache、mod_rewrite 和常用扩展(pdo_mysql、mbstring、xml 等),省去大量编译麻烦。
关键实操点:
立即学习“PHP免费学习笔记(深入)”;
- 别直接跑
php:8.3-cli—— 它没 Web 服务器,不能当应用容器用 - 把 Laravel 的
public/目录挂载为 Apache DocumentRoot,不是项目根目录 - 必须启用
opcache:在docker run或Dockerfile中加-d opcache.enable=1,否则性能掉一截 - 时区要显式设:通过环境变量
PHP_INI_SCAN_DIR=/usr/local/etc/php/conf.d+ 挂载自定义timezone.ini,内容为date.timezone = Asia/Shanghai
最小可运行命令示例:
docker run -d \ --name laravel-app \ -p 8080:80 \ -v $(pwd)/public:/var/www/html \ -v $(pwd)/.env:/var/www/html/.env \ -e APACHE_DOCUMENT_ROOT=/var/www/html \ -d php:8.3-apache
自己构建 php:8.3-fpm 镜像时最容易漏的三件事
如果要用 Nginx 反代 PHP-FPM(更推荐的生产结构),基于 php:8.3-fpm 自定义镜像是常见做法。但很多人 build 出来后发现 502 Bad Gateway,问题往往出在基础配置缺失:
-
www.conf里没改监听方式:默认是listen = /run/php/php8.3-fpm.sock,但 socket 文件路径权限不对;更稳的是改成listen = 9000并配listen.allowed_clients = 127.0.0.1 - 没开
clear_env = no:Docker 默认传入的环境变量(如DB_HOST)会被 FPM 清掉,导致 Laravel 读不到 .env - 扩展没装全:比如 Laravel 用
ext-redis做缓存,但php:8.3-fpm基础镜像不带,得在Dockerfile里补docker-php-ext-install redis
检查是否生效,进容器执行:php -m | grep -E 'pdo|mbstring|opcache|redis',缺哪个就补哪个。
php:8.3 镜像里 Composer 版本太老怎么办
官方 PHP 镜像自带的 composer 是系统级安装(/usr/bin/composer),版本固定(如 2.5.x),不支持 PHP 8.3 新增的类型语法校验,也缺少 --with-all-dependencies 等新选项。
正确做法不是覆盖系统 composer,而是运行时拉新版:
- 构建阶段:用
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - 运行阶段:直接
docker run --rm -v $(pwd):/app -w /app php:8.3-cli composer install --no-dev,它会自动用容器内新版 - 注意:别在
php:8.3-apache里长期运行composer install—— Apache 进程可能因超时中断,应单独用cli镜像做构建
真正麻烦的是 vendor 权限:宿主机 UID 和容器内 www-data 不一致时,composer install 写的文件可能让 Apache 读不了。解决方案是构建时用 --build-arg UID=$(id -u) 动态创建匹配用户,而不是硬编码 www-data。











