2016-05-02 6 views
1

私のアプリにpostgres dbのDockerfileを作成しようとしています。ポストグルでdockerfileを設定する

Dockerfile

FROM postgres:9.4 
RUN mkdir /sql 
COPY src/main/resources/sql_scripts/* /sql/ 
RUN psql -f /sql/create_user.sql 
RUN psql -U user -W 123 -f create_db.sql 
RUN psql -U user -W 123 -d school_ats -f create_tables.sql 

実行

docker build . 

結果:

Sending build context to Docker daemon 3.367 MB 
Step 1 : FROM postgres:9.4 
---> 6196bca94565 
Step 2 : RUN mkdir /sql 
---> Using cache 
---> 6f57c1e759b7 
Step 3 : COPY src/main/resources/sql_scripts/* /sql/ 
---> Using cache 
---> 3b496bfb28cd 
Step 4 : RUN psql -a -f /sql/create_user.sql 
---> Running in 33b2230a12fa 
psql: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 
The command '/bin/sh -c psql -a -f /sql/create_user.sql' returned a non-zero code: 2 

は、どのように私は私のプロジェクトのためのドッキングウィンドウでDBを指定することができますか?

+1

ベース:9.4'エントリポイントが開始されるまで、実際にはpostgresを実行しません。まず、ベースイメージからコンテナを開始する必要があります。 –

答えて

3

ドッキング・イメージを構築するとき、postgresは実行されていません。コンテナの起動時にデータベースが起動され、その後にSQLファイルが実行されます。最も簡単な解決策は、特別なディレクトリにあなたのsqlファイルを置くことです:

FROM postgres:9.4 
COPY *.sql /docker-entrypoint-initdb.d/ 

このディレクトリからすべてのファイルを実行します起動スクリプトを起動します。これについては、https://hub.docker.com/_/postgres/セクションにあるの画像を参照してください。

また、別のユーザーが必要な場合は、環境変数POSTGRES_USERPOSTGRES_PASSWORDを設定する必要があります。ユーザー作成のためにカスタムスクリプトを使用する方が簡単です。

+0

最新の推奨事項によれば、「コピー」を「追加」よりも使用する方がよいはずです。 –

+0

True、fixed this :) – jazgot

1

イメージビルド中に、上記のコメントに記載されているように、実行中のPostgresのインスタンスは取得されません。

多少異なるアプローチをとることができます。 SQLスクリプトを自分で実行しようとするのではなく、/docker-entrypoint-initdb.d/ディレクトリにコピーすることができます。コンテナの起動時に実行されます。 9.4イメージがビルドです:あなたDockerfileでも

データベースの詳細を設定するために、変数を使用します。

は、Postgresはどのように見てください

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD `postgresのdockerfile
関連する問題