まず、これらの環境変数は疑わしいように見えます。 公式Dockerイメージのドキュメント
をご覧ください。 、POSTGRES_DB
が必要であることに注意してください 、POSTGRES_USER
、およびPOSTGRES_PASSWORD
、DB_NAME
ではなく 、DB_USER
、およびDB_PASS
。
それ以外は、ほとんど正しい方向に進んでいるようです。完全な例は次のとおりです。
まず、Postgresコンテナを起動します。永続ストレージをホームディレクトリの外のどこかに配置しています。これは、ファイルが自分で所有されないことをすでに説明しているため、ホームディレクトリで混乱する可能性があります(必ずしも問題があるとは限りません)。
docker run --rm --name postgres \
-v /tmp/postgres:/var/lib/postgresql/data \
-e POSTGRES_DB=larstest \
-e POSTGRES_USER=lars \
-e POSTGRES_PASSWORD=secret postgres
そのデータディレクトリをポイントしてpostgresを開始するのはこれが初めてなので、データベースが初期化されることがわかります。
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
Success. You can now start the database server using:
これで、別のウィンドウから接続できます...
$ psql -h 172.17.0.4 -U lars larstest
Password for user lars:
psql (9.5.4, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
Some psql features might not work.
Type "help" for help.
...そしていくつかのデータを作成します:
larstest=# create table testtable (id integer);
CREATE TABLE
larstest=# insert into testtable values (1);
INSERT 0 1
larstest=# select * from testtable;
id
----
1
(1 row)
ここで、コンテナを終了します:
^CLOG: received fast shutdown request
LOG: aborting any active transactions
FATAL: terminating connection due to administrator command
LOG: autovacuum launcher shutting down
LOG: shutting down
LOG: database system is shut down
実行されていないことを確認できます:
$ docker ps | grep postgres
ただし、同じコマンドライン引数を使用して再起動すると、
docker run --rm --name postgres \
-v /tmp/postgres:/var/lib/postgresql/data \
-e POSTGRES_DB=larstest \
-e POSTGRES_USER=lars \
-e POSTGRES_PASSWORD=secret postgres
すでに存在しているため、データベースが初期化されていないことがわかり、次の場所に直接スキップします。
LOG: database system was shut down at 2016-10-21 03:13:50 UTC
LOG: MultiXact member wraparound protections are now enabled
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
この時点で、データベースに再接続して、データがまだ存在していることを確認できます。
$ psql -h 172.17.0.2 -U lars larstest
Password for user lars:
psql (9.5.4, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
Some psql features might not work.
Type "help" for help.
larstest=# select * from testtable;
id
----
1
(1 row)
これでほぼすべてです。