如何在 Docker 上启用 WordPress 主题

How to enable theme on WordPress on Docker

我正在使用 docker 到 运行 几个 wordpress 主题/插件的开发环境。但是,我不知道如何在创建容器时自动启用我的主题。通常我会为此使用 wp-cli。我创建了一个扩展官方 wordpress 图像的自定义图像,但我无法弄清楚如何在 /var/www/html 文件夹获取设置后制作 wp-cli 命令 运行(我认为这是由创建的wordpress 图像入口点脚本)。如果我将命令放在 docker 文件的 "RUN" 命令中,这些命令就会失败,因为 /var/www/html 目录是空的。但是,如果我在设置后连接到容器,则会填充目录,并且 wp-cli 工作正常。我怎样才能 运行 在来自父图像的 entrypoint.sh 之后的命令是 运行?

这是我的 docker 文件的内容(不起作用):

FROM wordpress
MAINTAINER Me!
COPY docker-install/wp-cli.phar /usr/local/bin/wp
WORKDIR /var/www/html
RUN chmod u+x /usr/local/bin/wp
RUN /usr/local/bin/wp core install --title="Test WP Site" --admin_user=admin --admin_password=something --admin_email=my@cool.email  --url=localhost:8080 --allow-root
RUN /usr/local/bin/wp theme activate mytheme --allow-root

简短的回答:你不能。 ENTRYPOINTCMD 用于 Docker 容器 运行 时间,而不是构建时间。在这种情况下,Wordpress 环境实际上是在容器 运行 时启动的,因此您无法在构建期间与其交互。

长答案:您可以使用 Docker Compose 创建两项服务来帮助实现您的目标,一项用于 Wordpress,另一项用于 Wordpress CLI 变体(参见 cli 标签在 https://hub.docker.com/_/wordpress/) 和 volumes_from 第一个。然后,您可以使用 docker-compose run cli-service wp-cli command 来 运行 您的命令。

我创建了一个 prepare.sh 文件,其中包含我想要在 Apache 启动之前 运行 执行的命令,然后将其添加到 Dockerfile:

COPY ./prepare.sh /prepare.sh
RUN chmod +x /prepare.sh
CMD /prepare.sh && apache2-foreground

您应该在 docker-入口点之后创建一个安装主题的脚本。名称必须以 apache2 开头(docker-入口点检查 CMD 参数的名称 https://github.com/docker-library/wordpress/blob/0a5405cca8daf0338cf32dc7be26f4df5405cfb6/php5.6/apache/docker-entrypoint.sh#L26),例如 apache2-setup-wordpress.sh。

Dockerfile 会像这样

FROM wordpress:4.7.3

COPY apache2-setup-wordpress.sh /usr/local/bin
RUN chmod +x /usr/local/bin/apache2-setup-wordpress.sh
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-setup-wordpress.sh", "apache2-foreground"]