編集 - 2015 年 7 月 23 日以降
公式のpostgres docker イメージ.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 image のドキュメントから、
[...] そのディレクトリにある *.sh スクリプトをソースとして [ /docker-entrypoint-initdb.d
] サービスを開始する前にさらに初期化を行います
ここで重要なのは「サービス開始前」です。これは、postgres サービスが開始される前にスクリプトmake_db.shが実行されることを意味するため、 「データベース 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