使用Docker WordPress与WP-CLI自动安装WordPress遇错求助
问题:Docker部署WordPress时WP-CLI自动安装失败
我计划通过Docker部署WordPress容器,自动完成安装并配置默认站点名、管理员账号,后续使用wordpress:cli修改语言、安装插件,用于测试插件在不同场景下的表现。但在基础配置阶段遇到了问题。
我的docker-compose配置
version: "3.8" services: # WordPress Service wordpress: image: wordpress:latest ports: - "8088:80" environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - wordpress_data:/var/www/html depends_on: db: condition: service_healthy # MySQL Service db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 #WP-CLI Service wp-cli: image: wordpress:cli environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - wordpress_data:/var/www/html depends_on: - wordpress entrypoint: wp command: > sh -c ' wp core install --url="http://localhost:8088" --title="Example Site" --admin_user="admin" --admin_password="admin_password" --admin_email="info@example.com" --skip-email; ' volumes: wordpress_data: db_data:
报错信息
wp-cli-1 | Error: The site you have requested is not installed. wp-cli-1 | Run wp core install to create database tables. wp-cli-1 exited with code 1
访问http://localhost:8088/wp-admin/install.php可以手动完成安装,我怀疑问题出在wp-config.php的以下配置,但不知道如何修复:
/** Database username */ define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') ); /** Database password */ define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );
解决方案
1. 核心问题:WP-CLI执行时机过早
depends_on: - wordpress仅保证WordPress容器启动,但WordPress内部的初始化流程(生成wp-config.php、完成数据库连接准备)还未完成,此时WP-CLI执行wp core install会因环境未就绪报错。
2. 修改WP-CLI服务配置,增加等待逻辑
调整wp-cli服务的entrypoint和command,增加循环检查直到WordPress环境就绪,再执行安装命令:
wp-cli: image: wordpress:cli environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - wordpress_data:/var/www/html depends_on: - wordpress - db entrypoint: ["sh", "-c"] command: | until wp core is-installed --allow-root; do echo "等待WordPress初始化完成..." sleep 5 done wp core install --url="http://localhost:8088" --title="Example Site" --admin_user="admin" --admin_password="admin_password" --admin_email="info@example.com" --skip-email --allow-root
3. 关键调整说明
- 添加
--allow-root参数:WP-CLI容器默认使用www-data用户,挂载目录的权限可能导致命令执行失败,加上该参数可避免权限问题。 - 依赖数据库服务:wp-cli直接连接数据库,因此
depends_on中添加db确保数据库服务就绪。 - 用
wp core is-installed判断就绪状态:该命令直接检查WordPress与数据库的连接及初始化状态,比curl访问页面更准确。
4. 关于wp-config.php的疑问
你怀疑的getenv_docker配置没有问题,这是WordPress官方镜像内置的函数,用于正确读取Docker环境变量,你的环境变量配置已经正确,无需修改。
内容的提问来源于stack exchange,提问作者Kristian
相关产品推荐
相关产品推荐

