如何在构建过程中激活 docker 图像中的 WordPress 插件?

How can a WordPress plugin in a docker image be activated in the build process?

我正在寻找如何在构建过程中通过 Dockerfile 运行 命令激活 WordPress 插件。

Dockerfile中的相关命令为

# activate plugins
RUN wp plugin activate wp-discourse-export --allow-root --path=/var/www/html

我得到的错误是

Step 10/10 : RUN wp plugin activate wp-discourse-export --allow-root --path=/var/www/html
---> Running in c5dac3f62c4c
Error: This does not seem to be a WordPress install.
Pass --path=`path/to/wordpress` or run `wp core download`.
ERROR: Service 'wordpress' failed to build: The command '/bin/sh -c wp plugin 
activate wp-discourse-export --allow-root --path=/var/www/html' returned a non-zero code: 1

如果我禁用 运行 命令,构建映像,启动 docker 映像,登录到创建的 docker 映像并 运行

wp plugin activate wp-discourse-export --allow-root --path=/var/www/html
Plugin 'wp-discourse-export' activated.
Success: Activated 1 of 1 plugins.

激活成功

如何在构建过程中激活 docker 映像中的 WordPress 插件?

更新:

我正在通过将脚本复制到图像然后 运行 稍后从主机复制脚本来解决这个问题。

在 Dockerfile 中。

# activate plugins
COPY activate-wordpress-plugins.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/activate-wordpress-plugins.sh

在 docker-compose 我 运行 这个命令一次。

docker exec -it wordpress_1_7522c9dae310 /usr/local/bin/activate-wordpress-plugins.sh

更新 2

我创建了一个脚本来启动实例,然后 运行 脚本。

#!/usr/bin/env bash

echo docker-compose up -d
docker-compose up -d

echo docker exec -it $(docker-compose ps -q wordpress)  /usr/local/bin/activate-wordpress-plugins.sh
docker exec -it $(docker-compose ps -q wordpress)   /usr/local/bin/activate-wordpress-plugins.sh

我认为问题是 WordPress 插件激活需要 WordPress 安装处于活动状态,并具有有效的数据库连接。在映像构建期间,您还没有实例化该环境。构建图像与 运行 容器中的图像不同。

激活插件的适当时间是在启动时,如您所建议的那样,当容器实例化时。

Wordpress 确实有一个名为 mu-plugins 的特殊目录。只需将您的插件放在那里。 https://codex.wordpress.org/Must_Use_Plugins.

WordPress 仅在 mu-plugins 目录中查找 PHP 文件。您可能需要在 mu-plugins 目录

中创建代理 PHP 加载程序文件
  • Always-on, no need to enable via admin and users cannot disable by accident.
  • Can be enabled simply by uploading file to the mu-plugins directory, without having to log-in.
  • Loaded by PHP, in alphabetical order, before normal plugins, meaning API hooks added in an mu-plugin apply to all other plugins even if they run hooked-functions in the global namespace