WordPress wp-config.php用getenv读环境变量连接数据库失败
WordPress环境变量配置数据库参数失败问题
问题现象
硬编码数据库参数到wp-config.php可正常连接数据库,但通过系统环境变量读取参数时连接失败。
可正常运行的wp-config.php配置
define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'wordpress_psw'); define('DB_HOST', 'wp-db');
无法工作的wp-config.php配置
/** MySQL database password */ define( 'DB_PASSWORD', getenv('WORDPRESS_DATABASE_PASSWORD') ); error_log("DB_PASSWORD: ".getenv('WORDPRESS_DATABASE_PASSWORD')); /** MySQL hostname */ define( 'DB_HOST', getenv('WORDPRESS_DATABASE_HOST') ); error_log("DB_HOST: ".getenv('WORDPRESS_DATABASE_HOST')); define( 'DB_NAME', getenv('WORDPRESS_DATABASE_NAME') ); error_log("DB_NAME: ".getenv('WORDPRESS_DATABASE_NAME'));
Docker Compose配置
wp-db: image: docker.io/bitnami/mysql:8.0 restart: unless-stopped volumes: - ./wordpress/db/data.sql:/docker-entrypoint-initdb.d/data.sql environment: - ALLOW_EMPTY_PASSWORD=yes - MYSQL_USER=wordpress - MYSQL_PASSWORD=wordpress_psw - MYSQL_DATABASE=wordpress ports: - "3306:3306" wordpress: build: context: ./wordpress ports: - '8002:8080' - '8443:8443' depends_on: - wp-db volumes: - ./wordpress/wp_src_code:/bitnami/wordpress environment: WORDPRESS_DATABASE_HOST: 'wp-db' WORDPRESS_DATABASE_NAME: 'wordpress' WORDPRESS_DATABASE_PASSWORD: 'wordpress_psw' WORDPRESS_DATABASE_USER: 'wordpress'
日志排查信息
添加error_log输出环境变量值时,日志能正常打印出Docker Compose中配置的内容,但实际数据库连接时,getenv似乎返回空字符串或false,导致连接失败。
日志输出截图:
解决建议
换用
$_SERVER全局变量读取
部分场景下getenv读取环境变量存在兼容性问题,可改用$_SERVER尝试:define('DB_HOST', $_SERVER['WORDPRESS_DATABASE_HOST'] ?? 'wp-db'); define('DB_NAME', $_SERVER['WORDPRESS_DATABASE_NAME'] ?? 'wordpress'); define('DB_PASSWORD', $_SERVER['WORDPRESS_DATABASE_PASSWORD'] ?? 'wordpress_psw');检查PHP的
variables_order配置
确保PHP配置中variables_order包含E(环境变量),可在wp-config.php开头添加代码验证:phpinfo(); exit;若输出中
variables_order无E,需修改php.ini为variables_order = "EGPCS"。利用Bitnami镜像原生配置逻辑
Bitnami WordPress镜像默认支持通过环境变量自动生成wp-config.php,无需手动修改该文件。如果手动修改过配置,建议恢复默认文件,让镜像自动完成配置。添加默认值兜底
为避免环境变量读取失败导致服务崩溃,在定义参数时添加默认值:define('DB_HOST', getenv('WORDPRESS_DATABASE_HOST') ?: 'wp-db');
内容的提问来源于stack exchange,提问作者Aliy
相关产品推荐
相关产品推荐

