編集-2015年7月23日以降
公式のpostgresdockerイメージは.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イメージのドキュメントから、
[...]そのディレクトリ[
/docker-entrypoint-initdb.d
で見つかった*.shスクリプトをソースします ]サービスを開始する前にさらに初期化を行う
ここで重要なのは、「サービスを開始する前に」です。 。これは、スクリプト make_db.shを意味します postgresサービスが開始される前に実行されるため、エラーメッセージ "could not connect to database 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