2017-04-09 77 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"]