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"
また、実行中のコンテナを実行します。
docker exec symfony /bin/bash -c "/bootstrap.sh"
何もうまくいかないようです。
あなたはそれをする方法を知っていますか?
RUN
とENTRYPOINT
は、スクリプトを実行する2つの異なる方法です。
RUN
は、中間コンテナーを作成し、スクリプトを実行し、そのコンテナーの新しい状態を新しい中間イメージで凍結することを意味します。スクリプトはそれ以降は実行されません。あなたの最終的な画像はそのスクリプトの結果を反映するはずです。
ENTRYPOINT
は、(まだスクリプトを実行していない)イメージがコンテナを作成し、そのスクリプトを実行することを意味します。
どちらの場合も、スクリプトを追加する必要があります。RUN chmod +x /bootstrap.sh
を使用することをお勧めします。
それは Shebang (#!/bin/sh
のように)で始まるべきです。
自分のスクリプト( KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh
:いくつかのgit config --global
コマンド)を考慮すると、Dockerfileでそのスクリプトを1回実行するのが最善の方法ですが、正しいユーザーを使用するようにしてください(グローバルgit構成ファイルは%HOMEです) %/。gitconfig、デフォルトでは/ rootです)
あなたのDockerfile に追加:
RUN /bootstart.sh
次に、コンテナーを実行するときに、スクリプトが実行されたことを確認するために/root/.gitconfig
の内容を確認します。
ADD
コマンドと作業ディレクトリの指定でスクリプトを作成してみてください。このように( "script"はスクリプトの名前、/root/script.sh
はコンテナ内の任意の場所です。別のパスにすることもできます。)
ADD script.sh /root/script.sh
この場合、ADD
はCMD
より前にくる必要があります。BTWが1つある場合は、ホストマシンからコンテナ内の任意の場所にスクリプトをインポートするのがクールな方法です。
CMD
に[./script]
を入れる
スクリプトが自動的に実行されます
WORKDIR
を/root
として指定することもできます。そうするとコンテナを起動すると自動的にrootになります。
上記の回答に加えて:
Windowsで.shスクリプトファイルを作成または編集した場合は、UNIX形式の行末で保存されていることを確認してください。デフォルトでは、Windowsの多くのエディタはUnixの行末をWindows形式に変換します。Linuxはファイルの先頭でShebang(#!/ bin/sh)を認識しません。そのため、LinuxはShebangが存在しない場合のようにエラーメッセージを表示します。
ヒント: