Pertama, variabel lingkungan tersebut terlihat mencurigakan. Lihat dokumentasi untuk gambar resmi Docker
, dan perhatikan bahwa Anda memerlukan POSTGRES_DB
, POSTGRES_USER
, dan POSTGRES_PASSWORD
, daripada DB_NAME
, DB_USER
, dan DB_PASS
.
Selain itu, Anda tampaknya sebagian besar berada di jalur yang benar. Berikut ini contoh lengkapnya:
Pertama, saya memulai wadah Postgres. Saya menemukan penyimpanan persisten di suatu tempat di luar direktori home saya, karena seperti yang telah Anda catat bahwa file tidak akan dimiliki oleh Anda, yang dapat membingungkan di direktori home Anda (meskipun tidak selalu bermasalah):
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
Karena ini adalah pertama kalinya saya memulai postgres menunjuk ke direktori data itu, kita akan melihatnya menginisialisasi database:
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:
Sekarang, dari jendela lain, saya dapat menyambungkannya...
$ 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.
...dan buat beberapa data:
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)
Sekarang, saya keluar dari wadah:
^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
Kami dapat memverifikasi bahwa itu tidak lagi berjalan:
$ docker ps | grep postgres
Tetapi jika kita memulainya lagi dengan argumen baris perintah yang sama;
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
Kami melihat bahwa itu tidak menginisialisasi database, karena sudah ada, dan langsung melompat ke:
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
Pada titik ini, kita dapat menghubungkan kembali ke database dan menemukan bahwa data kita masih ada:
$ 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)
Kurang lebih itu saja.