Docker 官方 PHP 镜像修复 PHP2Shell 了吗?
Docker 官方 PHP 镜像的修复更新已经合并(升级到四个修复版本)。但“合并”不等于每个标签、每种 CPU 架构的镜像都已经构建好推送出来,本站没有逐一核实。拉取前请确认镜像仓库里确实有修复版本的标签:
| 分支 | 首个修复版本 |
|---|---|
| PHP 8.2 | 8.2.35 |
| PHP 8.3 | 8.3.36 |
| PHP 8.4 | 8.4.27 |
| PHP 8.5 | 8.5.12 |
| 8.1 及更早 | 无新发行版(7.4、8.0、8.1 有官方源码补丁) |
latest 这类浮动标签不能证明里面是修复版本,要看具体版本号。
1Panel 的 PHP 运行环境怎么办?
1Panel 的 PHP 运行环境用的是 1Panel 官方的 1panel/php 镜像。截至本站核实时,这个镜像的标签列表里还没有修复版本的标签(最新的仍是修复前的小版本)。在官方推出新标签之前:
- 关注 1Panel 官方的更新通知;
- 先做 临时缓解,必要时暂停网站;
- 新标签出来后,在面板里把运行环境切换或重建到新版本,再复查。
用的是应用镜像(WordPress、Nextcloud 等)怎么办?
很多应用镜像里自带 PHP,由应用的维护者发布。应用版本号说明不了里面的 PHP 是哪个版本。要看该镜像维护者的公告,确认新镜像已经基于修复版本的 PHP 构建。
国外社区就有人问“Zabbix 的官方 Docker 镜像会不会为 PHP2Shell 重建”——这类问题只能等应用维护者回答,不能自己推断。
自己写的 Dockerfile 怎么修?
如果你的镜像是 FROM 官方 PHP 镜像构建的:
- 把
FROM里的标签改成修复版本(或确认浮动标签已指向修复版本); - 重新构建你的镜像,不能只改宿主机上的包;
- 推送到你的镜像仓库,再按正常流程部署。
不要在运行中的容器里直接升级 PHP 当长期方案:容器一重建,改动就没了。
为什么 pull 了新镜像,网站还是旧的?
docker pull / docker compose pull 只是把镜像下载到本地,正在运行的容器还在用旧镜像。要让服务按你原来的部署流程重新创建容器(比如 compose 重新 up),旧容器才会被替换。
重新创建前确认数据卷配置正确、有备份,避免数据丢失。
怎么确认容器里跑的是修复版本?
- 看正在运行的容器用的镜像 digest,是否就是你刚拉取或构建的那个;
- 在对应的容器里运行
php -v,宿主机的php -v不算数;命令行结果仍可能和网站进程不同,WordPress 网站再用站点健康确认,然后填进 PHP 版本检测; - 多副本、多节点的,每个都要确认。
“PR 合并 → 镜像发布 → 拉取/构建 → 部署 → 运行复查”是五个独立的检查点,不要合成一个“已修复”。
依据哪些来源?
- Docker 官方 PHP 镜像更新
- Docker:docker compose pull
- Docker:docker compose up
- 1Panel 官方 PHP 镜像标签
- Reddit r/zabbix:官方 Docker 镜像会不会重建
- The PHP Group:php_sapi_name
- The PHP Group:PHP 安全公告
不确定自己是否受影响,先用 PHP2Shell 检测。
来源
本页的核心事实(修复版本、CVE 详情、发行版软件包、官方机构的提醒)都来自官方来源;研究报告、新闻和社区讨论已分别标注。
- [security] Update to 8.5.12, 8.4.27, 8.3.36, 8.2.35厂商 Docker Official Images maintainers
- docker compose pull官方 Docker
- docker compose up官方 Docker
- 1panel/php tags厂商 1Panel (Docker Hub)
- Will official Docker images get rebuilt for PHP2Shell?社区 Reddit r/zabbix
- php_sapi_name官方 The PHP Group
- Security advisory: Critical remote code execution vulnerabilities, update now官方 The PHP Group