2017-07-05 5 views
0

PostgreSQLを実行するDockerfileを実行してから、いくつかのテーブルを追加しようとしています。ENTRYPOINTが終了していない場合、DockerfileはCMDを実行しません。

これは私のDockerfileです:

FROM postgres:9.6 

MAINTAINER [email protected] 

USER postgres 
ADD ./backup.sql /backup.sql 
ADD ./deploy/import_database.sh /import_database.sh 

USER root 
RUN chmod +x /import_database.sh 

USER postgres 

ENTRYPOINT ./docker-entrypoint.sh postgres 
CMD ./import_database.sh 

それはpostgresのサーバを実行becouseエントリポイントが完了していません。 たとえば、ENTRYPOINTを実行して20秒後にENTRYPOINTを終了しないでCMDを実行できますか?

可能ですか?

答えて

3

これは、CMDENTRYPOINTの仕組みではありません。 https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interactを読んで、ENTRYPOINTCMDがどのように相互作用するかをよりよく理解するためにチャートをチェックすることをお勧めします。

つまり、実行時にSQLファイルをインポートしたりスクリプトを実行するだけであれば、公式のPostgreSQLイメージではすでにカバーしています。これを行う方法については、https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-imageを参照してください。

あなたDockerfileの場合の例(あなただけのSQLファイルをインポートしたい場合)のような何かを行うに次のようになります。このDockerfile上のイメージのビルドからコンテナを起動すると

FROM postgres:9.6 
ADD ./backup.sql /docker-entrypoint-initdb.d/backup.sql 

を、デフォルトのENTRYPOINTスクリプトは一時的なPostgreSQLインスタンスを起動し、準備が整うのを待ってからデータをインポートし、再起動して接続を提供します。

+0

本当にありがとうございます!それは私にとって完璧に動作します:)それは 'CMD'と' ENTRYPOINT'が一緒に働く方法を読んでいます。 –

関連する問題