标准做法是替换基础镜像标签并重建容器,而非升级运行中容器;需将FROM行改为php:8.3-apache等带后缀的有效标签,拉取验证后构建新镜像并重新部署。

直接改基础镜像标签,重新构建并替换容器,是 Docker 环境升级 PHP 到 8.3 的标准做法。不需要在运行中的容器里“升级 PHP”,而是用新版镜像重建服务。
确认当前用的镜像标签
检查 Dockerfile 或 docker-compose.yml 中的 FROM 行,比如:
-
FROM php:8.1-apache→ 要升级到php:8.3-apache -
FROM php:8.2-fpm→ 改为php:8.3-fpm - 注意:不要写
php:8.3(该标签已废弃),必须带后缀如-apache、-fpm或-cli
拉取并验证 8.3 镜像
先本地验证目标镜像是否可用:
-
docker pull php:8.3-apache(或对应用途的标签) -
docker run --rm php:8.3-apache php -v→ 应输出PHP 8.3.x -
docker run --rm php:8.3-apache php -m | grep -E '^(pdo|mysqli|opcache)$'→ 检查关键扩展是否存在,缺失需在 Dockerfile 中安装
更新 Dockerfile 并构建新镜像
修改你的 Dockerfile:
立即学习“PHP免费学习笔记(深入)”;
- 把
FROM php:8.2-apache替换为FROM php:8.3-apache - 检查扩展安装命令是否兼容:PHP 8.3 对 gd、zip、opcache 等扩展支持良好,但某些旧 configure 参数可能需微调(例如 gd 配置路径)
- 如有自定义 php.ini,确认其中的配置项仍被 8.3 支持(如
zend.assertions默认值已变) - 执行
docker build -t myapp:php83 .
替换运行中的容器
根据部署方式选择操作:
- 纯 Docker:先
docker stop myapp-container && docker rm myapp-container,再docker run -d --name myapp-container -p 80:80 myapp:php83 - Docker Compose:
docker-compose down && docker-compose pull && docker-compose up -d - 务必挂载好数据卷(如数据库连接、上传目录、缓存路径),确保业务数据不丢失



















