編集-2015年7月23日以降
画像ドッカ公式Postgresは実行されます.sql
で見つかったスクリプト/docker-entrypoint-initdb.d/
フォルダを。
したがって、必要なのは次のSQLスクリプトを作成することだけです。
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
Dockerfileに追加します。
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
ただし、2015年7月8日以降、ユーザーとデータベースを作成するだけでよい場合はPOSTGRES_USER
、POSTGRES_PASSWORD
とPOSTGRES_DB
環境変数を使用する方が簡単です。
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
またはDockerfileで:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
2015年7月23日より前の画像
以下からのpostgresドッカーイメージのドキュメント、次のことが言われています
[...] /docker-entrypoint-initdb.d
サービスを開始する前に、さらに初期化を行うために、そのディレクトリにある* .shスクリプトをソースします[ ]
ここで重要なのは、「サービスを開始する前に」です。つまり、スクリプトmake_db.shはpostgresサービスが開始される前に実行されるため、「データベースpostgresに接続できませんでした」というエラーメッセージが表示されます。
その後、別の役立つ情報があります。
初期化の一部としてSQLコマンドを実行する必要がある場合は、Postgresシングルユーザーモードの使用を強くお勧めします。
これは、一見したときに少し不思議なものになる可能性があることに同意しました。それが言うことはあなたの初期化スクリプトがそのアクションを行う前にシングルモードでpostgresサービスを開始するべきであるということです。したがって、make_db.kshスクリプトを次のように変更すると、目的に近づくはずです。
注、これは最近のコミットで最近変更されました。これは最新の変更で動作します:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
以前は、--single
モードの使用が必要でした:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
gosu postgres postgres --single < /tmp/somefile.sql