如何在构建过程中激活 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
我正在寻找如何在构建过程中通过 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