2017-04-09 125 views
1

我使用docker为几个WordPress主题/插件运行开发环境。但是,我无法弄清楚如何在容器创建时自动启用我的主题。通常我会使用wp-cli来做这件事。我创建了一个扩展官方WordPress图像的自定义图像,但我无法弄清楚如何在/ var/www/html文件夹获取设置后运行wp-cli命令(我认为这是由wordpress图像创建的入口点脚本)。如果我将这些命令放在dockerfile的“RUN”命令中,那么这些命令就会失败,因为/ var/www/html目录是空的。但是,如果我在连接到容器后立即安装该目录,并且wp-cli工作得很好。如何在父图像的entrypoint.sh运行后运行命令?如何在Docker上启用WordPress主题

这里是我的dockerfile的内容(不工作):

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 [email protected] --url=localhost:8080 --allow-root 
RUN /usr/local/bin/wp theme activate mytheme --allow-root 
+0

你需要使用自定义的入口点的脚本。 'ENTRYPOINT'和'CMD'是运行时指令,因此您放入Dockerfile(构建时间)的任何内容都将首先运行。 – johnharris85

回答

1

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

长的答案:您可能能够通过使用泊坞窗撰写创建两个服务,一个WordPress的,另一个用于WordPress的CLI变种(见cli标签在https://hub.docker.com/_/wordpress/)与volumes_from第一个帮助实现自己的目标。然后,您可以使用docker-compose run cli-service wp-cli command来运行您的命令。

0

我创建了一个prepare.sh文件,其中包含我想运行Apache的命令开始之前,再加入这个到Dockerfile:

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

你有没有试过这个脚本? 如果您查看原始docker-entrypoint.sh https://github.com/docker-library/wordpress/blob/0a5405cca8daf0338cf32dc7be26f4df5405cfb6/php5.6/apache/docker-entrypoint.sh#L26检查de CMD是否以apache2开头但是这个被覆盖的脚本不是 – doterob

+0

谢谢你指出!我已经尝试过,它的工作原理。这条线的目的是什么? – Richard

0

你应该创建一个搬运工,入口点后安装主题的脚本。该名称必须以apache2开头(docker-entrypoint检查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"]