WordPress Docker Compose 部署图文教程

DOCKER COMPOSE · TUTORIAL 02

WordPress Docker Compose 部署图文教程

适用服务器:(服务器IP)(CentOS 7 · 4核4G)· 前置:MySQL 8.0 已按教程一部署于同一网络

0. 环境速览

本服务器实际部署

以下信息来自服务器上正在运行的 WordPress 容器(docker inspect wordpress 实测)。本服务器 WordPress 当前由 docker run 手动启动,本教程给出标准化的 Docker Compose 方案(配置与现网一致,可直接落地)。

项目 实际值 说明
镜像 wordpress:latest 官方镜像(内置 Apache + PHP + WordPress)
容器名 wordpress –
端口映射 0.0.0.0:8080 → 容器 80 外部通过 http://IP:8080 访问
站点文件 wordpress_data 卷 → /var/www/html Docker named volume,含全部程序与上传文件
数据库连接 mysql:3306 / wordpress / wordpress 主机名 mysql,库/用户均为 wordpress
网络 1panel-network(172.18.0.0/16) 与 MySQL 同网络,走容器内网直连
重启策略 unless-stopped 开机自启
启动命令 apache2-foreground 官方镜像默认入口

1. 部署架构

docker network: 1panel-network (172.18.0.0/16, external)

wordpress 容器 wordpress:latest (Apache+PHP) 监听 80/tcp WORDPRESS_DB_HOST=mysql:3306 DB_USER=wordpress · DB_NAME=wordpress restart: unless-stopped wordpress_data 卷 → /var/www/html

mysql 容器 mysql:8.0 3306/tcp utf8mb4 mysql:3306

用户浏览器 http://域名或IP:8080 0.0.0.0:8080 → 80

宿主机 (服务器IP) · CentOS 7 · Docker 26.1.4 · Compose 项目目录(示例)/opt/docker/wordpress

访问链路:浏览器 → 服务器IP:8080 → WordPress 容器(Apache)→ 同网络直连 mysql:3306 → MySQL 容器。数据库不需要对公网暴露,仅容器内网即可。

2. 前置条件

PREREQ

  1. Docker 与 Docker Compose 已安装(Docker ≥ 20.10,Compose v2)。
  2. MySQL 8.0 已按《MySQL Docker Compose 部署图文教程》部署,且已创建 WordPress 库与用户(即 compose 中 MYSQL_DATABASE=wordpress、MYSQL_USER=wordpress)。
  3. 两个容器处于同一个 Docker 网络(本教程沿用 1panel-network),否则 WordPress 无法用 mysql 主机名连库。
如果 MySQL 尚未建库,可先执行:docker exec -it mysql mysql -uroot -p 后运行 CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 与 CREATE USER 'wordpress'@'%' IDENTIFIED BY '你的密码'; GRANT ALL ON wordpress.* TO 'wordpress'@'%'; FLUSH PRIVILEGES;;按教程一部署则这些已自动完成。

3. 步骤一:编写 docker-compose.yml

STEP 1

创建项目目录与 compose 文件:

sudo mkdir -p /opt/docker/wordpress
sudo vi /opt/docker/wordpress/docker-compose.yml

粘贴以下内容(数据库密码替换为 MySQL 教程中设置的值):

services:
  wordpress:
    image: wordpress:latest             # 官方镜像(Apache+PHP+WordPress)
    container_name: wordpress
    restart: unless-stopped
    ports:
      - "8080:80"                       # 外部 8080 → 容器 80(想用 80 直接访问则改 "80:80")
    environment:
      WORDPRESS_DB_HOST: mysql:3306     # 数据库主机:MySQL 容器名:端口(同网络)
      WORDPRESS_DB_USER: wordpress      # 数据库用户
      WORDPRESS_DB_PASSWORD: 你的数据库密码   # 必改
      WORDPRESS_DB_NAME: wordpress      # 数据库名
      WORDPRESS_TABLE_PREFIX: wp_       # 表前缀(默认 wp_)
      WORDPRESS_CONFIG_EXTRA: |
        define( 'WP_MEMORY_LIMIT', '256M' );   # 可选:提高 PHP 内存上限
        define( 'FS_METHOD', 'direct' );       # 可选:允许后台直接安装主题/插件
      TZ: Asia/Shanghai
    volumes:
      - wordpress_data:/var/www/html    # 站点全部文件(含 wp-content 上传)
    depends_on:
      - mysql                           # 等待 MySQL 先启动
    networks:
      - 1panel-network

  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: unless-stopped
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: 你的Root强密码    # 必改
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: 你的数据库密码
      TZ: Asia/Shanghai
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
    volumes:
      - /opt/mysql/data:/var/lib/mysql
      - /opt/mysql/conf:/etc/mysql/conf.d
    networks:
      - 1panel-network

volumes:
  wordpress_data:                       # named volume,数据持久化

networks:
  1panel-network:
    external: true                      # 复用已存在的网络
两种用法说明:① 若 MySQL 已按教程一单独部署(推荐,与服务器现网一致),请把上面 mysql: 服务整段删除,只保留 wordpress: 服务,并确保它加入 MySQL 所在的同一网络;② 若想一套 compose 全部起,则保留两个服务(上面写法)。两种方式 WordPress 的 WORDPRESS_DB_HOST 都填 mysql:3306。

4. 步骤二:启动服务

STEP 2

cd /opt/docker/wordpress
docker compose up -d          # 后台启动(首次会拉取 wordpress 镜像)
docker compose ps             # 状态应为 Up
docker logs -f wordpress      # 看到 "AH00094: Command line: 'apache2-foreground'" 即就绪
若现网已存在同名容器(本服务器现状:wordpress 由 docker run 启动),需先停止并移除旧容器再启动 compose:docker stop wordpress && docker rm wordpress。旧容器的数据卷 wordpress_data 会被新容器自动复用,站点数据不丢失(操作前建议先备份卷)。

5. 步骤三:浏览器完成 WordPress 安装向导

STEP 3

浏览器访问(首次安装时)http://(服务器IP):8080 或你的域名,进入安装界面:

安装步骤 填写内容
① 选择语言 简体中文 → 继续
② 数据库连接 数据库名 wordpress · 用户名 wordpress · 密码(你设置的)· 数据库主机 mysql:3306 · 表前缀 wp_
③ 站点信息 站点标题、管理员用户名/密码/邮箱、不要勾选「搜索引擎不索引本站」
④ 完成 点击「安装 WordPress」→ 自动跳转 /wp-login.php 登录后台
数据库主机必须填 mysql:3306(容器服务名),不要填 127.0.0.1 或服务器公网 IP——那会绕到宿主机 3306 端口,可能因防火墙或认证方式导致 “Error establishing a database connection”。

6. 步骤四:验证与后台使用

STEP 4

# 验证站点文件与权限
docker exec wordpress ls /var/www/html          # 应看到 wp-admin、wp-content、wp-config.php 等

# 验证数据库连接(容器内 PHP 连接测试)
docker exec wordpress php -r '$c=@new mysqli("mysql","wordpress","你的数据库密码","wordpress"); echo $c->connect_error ? "FAIL: ".$c->connect_error : "DB OK";'

# 进入后台
# 浏览器打开 http://IP:8080/wp-admin  → 安装时设置的管理员账号登录

登录后台后即可:安装主题/插件(外观、插件)、发布文章、配置固定链接、接入 CDN 与 HTTPS 等。主题与插件会写入 /var/www/html/wp-content,位于 wordpress_data 卷内,容器重建不丢失。

7. 步骤五:日常运维与升级

STEP 5

# 查看日志 / 重启
docker compose logs -f wordpress
docker compose restart wordpress

# 升级 WordPress 镜像(先备份!)
docker compose pull wordpress
docker compose up -d wordpress

# 备份站点文件(wordpress_data 卷)
docker run --rm -v wordpress_data:/data -v /opt/docker/backup:/backup alpine tar czf /backup/wp-$(date +%F).tar.gz -C /data .

# 数据库备份(对应 MySQL 教程)
docker exec mysql mysqldump -uroot -p你的Root密码 wordpress --single-transaction > /opt/docker/backup/wp-db-$(date +%F).sql
升级前务必同时备份文件卷与数据库;升级后如有异常可 docker compose up -d --force-recreate 重建容器,或回滚镜像标签。

8. 常见问题 FAQ

FAQ

Q1:安装时报 “Error establishing a database connection”

按顺序排查:① WORDPRESS_DB_HOST 必须是 mysql:3306;② WordPress 与 MySQL 是否在同一 Docker 网络(docker network inspect 1panel-network 看两个容器是否都在);③ 用户名/密码/库名是否与 MySQL 实际一致;④ MySQL 是否正常 docker compose ps。

Q2:8080 端口被占用 / 想直接用 80 端口

改 compose 端口映射 "80:80"(需先停掉占用 80 的进程,如 nginx),或换 "8081:80";改后 docker compose up -d 重建。若配了域名和 HTTPS,建议在 80/443 前挂 Nginx 反向代理。

Q3:后台提示 “要执行请求的操作,WordPress 需要访问您网页服务器的权限”(无法直接装主题/插件)

compose 已通过 WORDPRESS_CONFIG_EXTRA 写入 FS_METHOD=direct;若仍失败,检查 docker exec wordpress chown -R www-data:www-data /var/www/html 修正文件属主。

Q4:启用 HTTPS / 绑定域名

站点地址在「设置 → 常规」中改为 https://你的域名;推荐在容器外部署 Nginx + Let’s Encrypt 反代到 127.0.0.1:8080,并给 wp-config.php 增加 $_SERVER['HTTPS']='on';(或通过 WORDPRESS_CONFIG_EXTRA 注入反向代理处理代码)。

Q5:升级后页面样式/插件异常

多为缓存问题:后台「设置 → 固定链接」点一次「保存更改」刷新重写规则;同时清理浏览器缓存与 CDN 缓存。仍异常则检查 wp-content/plugins 是否有不兼容插件,可暂时重命名插件目录排障。

Q6:本服务器当前是 docker run 启动的,如何平滑切换到 Compose?

① docker inspect wordpress 拿到现网参数(本服务器:8080→80、env 连 mysql:3306、卷 wordpress_data);② 按本教程 compose 内容写文件;③ docker stop wordpress && docker rm wordpress 移除旧容器(卷保留);④ docker compose up -d。切换期间站点有短暂停机,建议低峰操作。

全链路回顾:MySQL 教程 → docker compose up -d 起 MySQL;本教程 → WordPress 同网络连接 mysql:3306;浏览器访问 IP:8080 完成安装。至此一套「MySQL + WordPress」容器化站点部署完成。
教程基于 (服务器IP) 服务器实测配置编写(Docker 26.1.4 / Compose v2.27.1 / CentOS 7)· 所有密码均为占位符,请替换为强密码
生成于 2026-08-31

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容