【问题标题】:Execute a plugin-installed WP-CLI command with Docker Compose使用 Docker Compose 执行插件安装的 WP-CLI 命令
【发布时间】:2019-07-21 19:03:59
【问题描述】:

简介:

我正在尝试运行一些 WP-CLI 命令进行维护,作为我在生产站点上发布过程的一部分。我可以对下面的 docker-compose 文件成功执行以下命令。

  • docker-compose run wp-cli_collinmbarrett-com core update
  • docker-compose run wp-cli_collinmbarrett-com plugin update --all
  • docker-compose run wp-cli_collinmbarrett-com theme update --all
  • docker-compose run wp-cli_collinmbarrett-com db optimize

我在网站上安装了一个插件 (WP-Sweep),它添加了自己的 WP-CLI 命令。当我尝试运行此命令时,it fails.

docker-compose run wp-cli_collinmbarrett-com sweep --all
/usr/local/bin/docker-entrypoint.sh: exec: line 15: sweep: not found

在非 dockerized 设置中,我已验证 WP-CLI 的 WP-Sweep 命令可以成功运行。

问题:

在使用 Docker Compose 在容器化环境中运行时,如何运行插件安装的 WP-CLI 命令?除了共享卷之外,我是否需要以某种方式让 WP-CLI 容器知道已安装的插件?

我的docker-compose.yml

version: "3.7"

services:
  wp_collinmbarrett-com:
    image: wordpress:fpm-alpine
    restart: always
    networks:
      - reverse-proxy
      - collinmbarrett-com
    depends_on:
      - mariadb_collinmbarrett-com
    volumes:
      - collinmbarrett-com_files:/var/www/html

  mariadb_collinmbarrett-com:
    image: mariadb:latest
    restart: always
    networks:
      - collinmbarrett-com
    volumes:
      - collinmbarrett-com_data:/var/lib/mysql

  wp-cli_collinmbarrett-com:
    image: wordpress:cli
    networks:
      - collinmbarrett-com
    volumes:
      - collinmbarrett-com_files:/var/www/html

networks:
  reverse-proxy:
    external:
      name: wp-host_reverse-proxy
  collinmbarrett-com:

volumes:
  collinmbarrett-com_files:
  collinmbarrett-com_data:

GitHub 上的完整配置。

【问题讨论】:

  • 你有没有想过解决这个问题?重新安装扫描插件,我怀疑您需要将插件 zip 下载到容器中。 wp-cli 假设插件可以通过 wp-cli 包列表获得,我猜扫描不是。
  • 我没有。可能是这样。这不再是我真正的需要,但无论如何我都希望听到一个可行的解决方案。

标签: wordpress docker docker-compose wp-cli


【解决方案1】:

没有直接回答您的命令需求(我还没有尝试过),但我想与您分享我正在使用的所有配置,希望对您有所帮助。

我的docker-compose.yml 有:

services:
...
  # Mysql container
  db:
...
  # Wordpress container
  wp:  
...
  wpcli:
    image: wordpress:cli
    user: "33:33"
    volumes:
      # necessary to write to the filesys
      - ./php-config/phar.ini:/usr/local/etc/php/conf.d/phar.ini
      - wp_app:/var/www/html
      - /tmp/wp-temp:/tmp/wp-temp
    environment:
      HOME: /tmp/wp-temp
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: $WORDPRESS_DB_USER
      WORDPRESS_DB_PASSWORD: $WORDPRESS_DB_PASSWORD
      WORDPRESS_DB_NAME: $WORDPRESS_DB_NAME
    depends_on:
      - db
      - wp
volumes:
  wp_app: {}
...

请注意,正如https://hub.docker.com/_/wordpress 中的以任意用户身份运行部分所述:

通过此映像的 cli 变体运行 WP-CLI 时,它是 需要注意的是,它们基于 Alpine,并且有一个默认值 Alpine 的 www-data 的 USER,其 UID 为 82(与 基于 Debian 的 WordPress 变体,其默认有效 UID 为 33),所以 对现有的基于 Debian 的 WordPress 运行 wordpress:cli 时 安装,可能需要 --user 33:33 之类的东西 (可能还有 -e HOME=/tmp 之类的东西,具体取决于 wp 命令 调用以及是否尝试使用 ~/.wp-cli)

您需要将 WP-CLI 用户定义为 www-data,用户 ID 和组 ID = 33。这就是我定义 user: "33:33" 的原因。此外,该命令可能需要下载临时内容,因此我定义了一个HOME 环境设置。另请注意,HOME 在您的主机中映射 还应分配用户 33:33 所有权 ID,否则 WP CLI 无法写入文件系统。

另外,WPCLI 映像中的 PHP.ini 将 phar.readonly 设置为 On,因此您需要覆盖它。我添加了一个具有该覆盖的特定 ./php-config/phar.ini 文件:

phar.readonly = Off

要执行插件安装,我在 docker-compose.yml 文件夹中执行以下命令:

docker-compose run --rm wpcli plugin install wp-mail-smtp  --force --allow-root

请注意--force --allow-root 是可选的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多