写在前面
2026年10月20日,PHP官方披露了两个严重安全漏洞(CVE-2026-109618、CVE-2026-109619)。WordPress 作为 PHP 生态中广泛使用的应用,同样受到影响。
如果你是通过 WordPress 官方 Docker 镜像部署的,由于 PHP 被封装在镜像内部,无法单独升级 PHP,只能整体替换 WordPress 的 Docker 镜像。
本文将演示如何在保留原有数据(文章、媒体、插件、主题)的前提下安全地完成这次镜像升级。操作前务必备份 WordPress 的数据库和媒体文件。
操作步骤
假设你部署 WordPress 的 docker-compose.yml 如下所示($xxx 表示自定义参数):
version: '3.3'
services:
db:
image: mysql:latest
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: $db_pwd_root
MYSQL_DATABASE: $db_name
MYSQL_USER: $db_usr
MYSQL_PASSWORD: $db_pwd
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: $db_usr
WORDPRESS_DB_PASSWORD: $db_pwd
WORDPRESS_DB_NAME: $db_name
volumes:
db_data: {}
请按以下步骤操作。
1. 确认当前 WordPress 使用的 Docker 卷(volume)
如果在 docker-compose.yml 中没有做特别指定,WordPress 的媒体等数据默认保存在某个卷里。我们首先要确认 WordPress 使用(挂载)了哪个卷。
- 使用
docker ps确认 wordpress 容器的 ID 或名称。 - 使用以下命令查看容器挂载信息:
docker inspect <容器名或ID> | jq '.[0].Mounts'
你会看到类似以下信息,其中的 <Volume名称> 就是我们要找的卷:
[
{
"Type": "volume",
"Name": <Volume名称>,
"Source": "/var/lib/docker/volumes/<Volume名称>/_data",
"Destination": "/var/www/html",
"Driver": "local",
"Mode": "rw",
"RW": true,
"Propagation": ""
}
]
2. 修改 docker-compose.yml
对原先用于部署 WordPress 的 docker-compose.yml 文件进行以下修改:
version: '3.3'
services:
# 此处省略
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: $db_usr
WORDPRESS_DB_PASSWORD: $db_pwd
WORDPRESS_DB_NAME: $db_name
# ---新增内容---
volumes:
- wordpress_recovery:/var/www/html
# -------------
volumes:
db_data: {}
# ---新增内容---
wordpress_recovery:
external: true
name: <Volume名称>
# -------------
3. 拉取并使用新镜像
- 使用
docker pull wordpress:latest拉取最新 WordPress 镜像。 - 使用
docker stop <容器名或ID>停止旧的 wordpress 容器。 - 使用以下命令让新镜像生效(该命令不会影响正在运行的数据库容器):
docker compose up -d --no-deps wordpress
- 登录自己的 WordPress,检查文章、媒体、插件是否正常。
4. 事后清理
参考文章《清理 Docker 的 container、image 与 volume》,清理残余文件。
