2016-10-25 49 views
4

圖像生成過程中執行腳本在我的Dockerfile結束時,我有以下幾點:如何泊塢

ENTRYPOINT bash -C '/usr/local/bin/setup_php_settings';'bash' 

如果我沒看錯的那/usr/local/bin/setup_php_settings將每個容器啓動時執行。如果是這樣,那麼我在該腳本中有幾個安裝的東西(比如this ZRay),我想轉移到另一個腳本,在圖像構建過程中只執行一次。

setup_php_settings的內容(在內部消除部分ZRay)如下:

#!/bin/bash -x 
set -e 

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"} 
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini 
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini 
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/apache2/php.ini 
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/cli/php.ini 
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/apache2/php.ini 
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/cli/php.ini 

mkdir -p /data/tmp/php/uploads 
mkdir -p /data/tmp/php/sessions 
mkdir -p /data/tmp/php/xdebug 
chown -R www-data:www-data /data/tmp/php* 

ln -sf /etc/php5/mods-available/zz-php.ini /etc/php5/apache2/conf.d/zz-php.ini 
ln -sf /etc/php5/mods-available/zz-php-directories.ini /etc/php5/apache2/conf.d/zz-php-directories.ini 
ln -sf /usr/share/php/libzend-framework-php/Zend/ /usr/share/php/Zend 
a2enmod rewrite 
php5enmod mcrypt 

# Apache gets grumpy about PID pre-existing files 
: "${APACHE_PID_FILE:=${APACHE_RUN_DIR:=/var/run/apache2}/apache2.pid}" 
rm -f "$APACHE_PID_FILE" 

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "[email protected]" 

的,我怎麼像在建立執行這些新的腳本的問題?使用CMD?任何其他解決方法?

回答

5

正確的指令是RUN。這將在圖像構建上運行腳本。你的情況 -

RUN /usr/local/bin/setup_php_settings 
CMD bash 
+1

沒有這麼快,我已經添加了'setup_php_settings'文件的內容,也許要重新檢查你的答案:)我會說根據您的回答,這將是最好有一個用於安裝的獨立的'RUN'命令,你覺得怎麼樣? – ReynierPM

+0

腳本中的所有步驟,除了最後一行之外,都應在映像構建期間運行(即單獨的「RUN」命令)。最後一個看起來更像是我將放在我的dockerfile中的一個'CMD'命令中,雖然我會在dockerfile中用'ENV'命令替換'source'部分(假設這個文件只設置env變量) –

+0

好的,可以你添加一個可能的設置的例子?對不起,我仍然在學習Docker :) – ReynierPM