You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:34:56