其他分类 · 25 10 月, 2026 0

WordPress官方Docker镜像升级指南:保留原数据的无损升级

写在前面

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》,清理残余文件。