2015-12-31 9 views
26

Dockerfileで自分のビルドプロセス中にスクリプトを実行しようとしています。 しかし、うまくいかないようです。Dockerfileでスクリプトを実行する

私はそのように試してみました:

FROM php:7-fpm 
ADD bootstrap.sh/
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"] 

はまた、この方法:

FROM php:7-fpm  
ADD bootstrap.sh/
RUN bash -c "/bootstrap.sh" 

そしてまた私の実行中のコンテナを実行BU:

docker exec symfony /bin/bash -c "/bootstrap.sh" 

何も動いていないようにみえ。

あなたはそれを行う方法を知っていますか?

+0

開始時に正しいファイル名ですか? –

+0

はいファイル名は正しい – Kevin

+0

'bootstarp.sh'に実行可能ビットが設定されていますか? – jwodder

答えて

34

RUNENTRYPOINTは、スクリプトを実行する2つの異なる方法です。

RUNは、中間コンテナを作成し、スクリプトを実行してそのコンテナの新しい状態を新しい中間イメージに固定することを意味します。それ以降はスクリプトが実行されません。最終的なイメージは、そのスクリプトの結果を反映しているはずです。

ENTRYPOINTは、(まだスクリプトを実行していない)イメージがコンテナを作成し、そのスクリプトを実行することを意味します。

いずれの場合も、スクリプトを追加する必要があります。RUN chmod +x /bootstarp.shをお勧めします。

また、で始まる必要がありshebang(のような#!/bin/sh

スクリプト(KevinRaimbaud/docker-symfony/docker/php/bootstarp.shgit config --globalコマンドのカップルは)考えると、それはあなたのDockerfileに一度そのスクリプトを実行するのが最善だろうが、使用して確認すること

RUN /bootstart.sh 

:右のユーザーが

your Dockerfileに追加する(グローバルGitの設定ファイルは、デフォルトでは/ルート1がある%のHOME%/ gitconfig、です)次に、コンテナを実行するときに、/root/.gitconfigの内容をチェックして、スクリプトが実行されたことを確認します。

+3

また、 'bootstarp.sh'ではなく' bootstrap.sh'を意味するかもしれません:http://stackoverflow.com/a/1254561/6309 – VonC

+0

Cool! RUN /bootstrap.shでうまく動作します – Kevin

+0

最初の行のシバンは私のためにそれをしました、ありがとう! :) – GDICommander

14

すること(「スクリプト」は、スクリプトの名前であり、/root/script.shこのように作業ディレクトリ のADDコマンドおよび仕様でスクリプトを作成してくださいあなたはコンテナにそれを配置したい場所、それは別のパスを指定できます:

ADD script.sh /root/script.sh 
この場合、

ADDは、あなたが1 を持っている場合、ところでそれがCMD代わりにホストマシンからコンテナ内の任意の場所に

をスクリプトをインポートするクールな方法だ、CMDの前に来る必要があり[./script]

それは自動的にあなたがまた/rootとしてWORKDIRを指定することができ、あなたのスクリプト

を実行する必要があり、その後、you'lは自動的にルートに配置され、コンテナ

関連する問題