搜索全站
安装部署 7 分钟阅读

Docker WordPress 镜像环境变量全解析:WORDPRESS_DB_HOST 等参数怎么用

详解 Docker 官方 wordpress 镜像的全部环境变量:数据库四项配置、WORDPRESS_CONFIG_EXTRA 注入自定义常量、WORDPRESS_DEBUG 开关,以及如何挂载自定义 php.ini 与 uploads.ini 解除上传限制,附完整可用配置示例。

U
UFO_PF 2025-11-25 · 阅读 7 分钟
Do 安装部署
阅读提示
本文约 2,784 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:同样的镜像,为什么别人一次跑通你却连不上库

很多人用 Docker 起 WordPress,卡住的地方高度一致:数据库连不上、上传限制 2MB、想改常量又不知道往哪儿写。这些问题本质都是同一个——没搞清楚官方镜像到底认哪些环境变量。

官方 wordpress 镜像并不是”把 WordPress 塞进容器”就完事,它在容器启动时有一段 docker-entrypoint.sh 脚本,会读取环境变量、自动生成 wp-config.php。你给它什么变量,它就写出什么配置。看懂这个机制,所有问题都有解。

原理分析:entrypoint 脚本做了什么

容器启动时按顺序执行:

  1. 检查 /var/www/html 是否已有 WordPress 文件,没有就从官方包复制一份;
  2. 读取 WORDPRESS_DB_* 系列变量,渲染 wp-config.php;
  3. 若设置了 WORDPRESS_CONFIG_EXTRA,把它原样追加进 wp-config.php;
  4. 把 /var/www/html 属主改成 www-data;
  5. 启动 Apache(或 PHP-FPM,取决于镜像 tag)。

关键点有两个:一是 wp-config.php 是生成的,你手工改了它,下次重建容器可能被覆盖,所以自定义内容应该走 WORDPRESS_CONFIG_EXTRA;二是数据库主机必须填容器网络里的服务名,写 localhost 指向的是 WordPress 容器自己。

保姆级实操

一、数据库四件套(必填)

变量 含义 示例
WORDPRESS_DB_HOST 数据库主机,可带端口 db:3306
WORDPRESS_DB_NAME 数据库名 wordpress
WORDPRESS_DB_USER 数据库用户 wpuser
WORDPRESS_DB_PASSWORD 数据库密码 强密码

配套还要给数据库镜像传 MARIADB_ROOT_PASSWORD、MARIADB_DATABASE、MARIADB_USER、MARIADB_PASSWORD,两边对上才能连通。

二、表前缀:WORDPRESS_TABLE_PREFIX

environment:
  WORDPRESS_TABLE_PREFIX: "mmf_"

站点上线后再改前缀代价很大,第一次部署就该定好。

三、注入自定义常量:WORDPRESS_CONFIG_EXTRA

这是最实用也最少被正确使用的一个变量。它支持多行:

environment:
  WORDPRESS_CONFIG_EXTRA: |
    define('WP_MEMORY_LIMIT', '256M');
    define('WP_MAX_MEMORY_LIMIT', '512M');
    define('DISABLE_WP_CRON', true);
    define('WP_POST_REVISIONS', 5);
    define('EMPTY_TRASH_DAYS', 15);
    define('FS_METHOD', 'direct');
    define('AUTOMATIC_UPDATER_DISABLED', true);
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
      $_SERVER['HTTPS'] = 'on';
    }

注意:这段内容会被写进 wp-config.php,所以语法必须是合法 PHP,少一个分号整个站点白屏。

四、调试与开发变量

environment:
  WORDPRESS_DEBUG: 1

只在排查时开,线上务必关掉——开启后 PHP 警告会直接输出到页面,等于把路径和结构暴露给访客。

五、自定义 php.ini(解除上传限制)

官方镜像支持把 *.ini 放进 /usr/local/etc/php/conf.d/ 自动加载:

mkdir -p /opt/wp-site/conf
cat > /opt/wp-site/conf/uploads.ini <<'EOF'
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_vars = 3000
EOF
  wordpress:
    volumes:
      - ./conf/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro

max_input_vars 常被忽略:菜单项特别多或者用页面构建器时,默认 1000 会导致保存菜单只保存了一部分。

六、验证配置是否生效

docker compose exec wordpress php -i | grep -E "upload_max_filesize|post_max_size"
docker compose exec wordpress php -r 'echo WP_MEMORY_LIMIT;'

常见踩坑与失败案例

  1. WORDPRESS_CONFIG_EXTRA 里用了双引号导致 YAML 解析失败 —— 用 | 块语法可以避免转义地狱。
  2. 改了环境变量但配置没变 —— wp-config.php 只在文件不存在时生成。已经装好的站点,要么删掉 wp-config.php 让容器重新生成,要么直接改文件。
  3. 案例:一位站长把 WP_HOME / WP_SITEURL 写死在 WORDPRESS_CONFIG_EXTRA 里,后来换域名,后台改不动地址,因为常量优先级高于数据库设置。建议只在迁移救急时临时用这两个常量。
  4. 把密码明文写进 docker-compose.yml 并推到公开仓库 —— 一定要用 .env 文件,并把 .env 加进 .gitignore。

总结

官方 wordpress 镜像的环境变量可以分成三类:数据库连通类、配置注入类、调试类。真正需要你记的只有 WORDPRESS_DB_HOST 填服务名、WORDPRESS_CONFIG_EXTRA 写自定义常量、自定义 php.ini 通过挂载 conf.d 生效这三条。掌握之后,容器化部署 WordPress 的可控性比传统方式高得多。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。