docker部署wordpress需用docker-compose编排mysql和wordpress容器,挂载./mysql-data和./wp-content实现数据持久化,配置环境变量确保服务互通,8080端口访问完成初始化;生产环境应加nginx反向代理并配置https。

在 Docker 中部署 WordPress 博客系统,核心是用容器隔离 MySQL(数据库)和 WordPress(应用),通过 docker-compose 编排服务、挂载数据卷保证持久化,并配置 Nginx 或 Apache(可选)反向代理。整个过程不依赖本地环境,5 分钟内可完成基础上线。
准备 docker-compose.yml 文件
这是最关键的一步。创建一个 docker-compose.yml,定义 WordPress 和 MySQL 两个服务,启用数据卷和网络互通:
- MySQL 容器使用官方
mysql:8.0镜像,设置MYSQL_ROOT_PASSWORD和MYSQL_DATABASE(如wordpress) - WordPress 容器用官方
wordpress:php8.2-apache镜像,通过WORDPRESS_DB_HOST指向 MySQL 服务名(如db:3306) - 为 WordPress 挂载
./wp-content目录,确保主题、插件、上传文件不丢失 - 为 MySQL 挂载
./mysql-data,避免容器重启后数据库清空
示例片段(保存为 docker-compose.yml):
version: '3.8'
services:
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: my_root_pass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
- ./mysql-data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
<p>wordpress:
image: wordpress:php8.2-apache
restart: unless-stopped
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_CONFIG_EXTRA: |
define('WP_DEBUG', true);
volumes:</p>
- ./wp-content:/var/www/html/wp-content ports:
- "8080:80" depends_on:
- db
启动并验证服务
在 docker-compose.yml 所在目录执行:
-
docker-compose up -d后台启动两个容器 -
docker-compose logs -f wordpress查看 WordPress 初始化日志,确认连接数据库成功、无“Access denied”或“Connection refused”错误 - 浏览器访问
http://localhost:8080,进入 WordPress 安装向导 —— 这说明服务已通 - 若卡在“无法连接数据库”,检查
WORDPRESS_DB_HOST是否写成db:3306(不是127.0.0.1),且depends_on已声明依赖
配置域名与 HTTPS(可选但推荐)
生产环境不建议直接用 :8080 端口暴露,应加一层反向代理:
- 用 Nginx 容器(或宿主机 Nginx)将
blog.example.com转发到wordpress:80容器 - 在 Nginx 配置中启用
proxy_set_header X-Forwarded-Proto $scheme;,否则 WordPress 可能误判为 HTTP 导致样式加载异常 - 用 Certbot + Let’s Encrypt 自动申请 HTTPS 证书,Nginx 中加载
ssl_certificate和ssl_certificate_key - WordPress 后台 → 设置 → 常规,把“WordPress 地址(URL)”和“站点地址(URL)”改为
https://blog.example.com
日常维护与备份
Docker 部署后,运维更轻量,但需养成习惯:
- 升级:修改
docker-compose.yml中镜像标签(如wordpress:6.4-php8.2-apache),运行docker-compose pull && docker-compose up -d - 备份数据库:用
docker exec db mysqldump -uwpuser -pwppass wordpress > backup.sql - 备份内容:压缩
./wp-content目录即可(含主题、插件、上传的图片等) - 调试插件冲突:临时注释掉
./wp-content/plugins下非必要插件目录,或改名绕过加载










