Ten eerste zien die omgevingsvariabelen er verdacht uit. Bekijk de documentatie voor de officiële Docker-afbeelding
, en merk op dat je POSTGRES_DB
. nodig hebt , POSTGRES_USER
, en POSTGRES_PASSWORD
, in plaats van DB_NAME
, DB_USER
, en DB_PASS
.
Verder lijk je grotendeels op de goede weg te zijn. Hier is een compleet voorbeeld:
Eerst start ik een Postgres-container. Ik zoek de permanente opslag ergens buiten mijn homedirectory, want zoals je al hebt opgemerkt, zijn bestanden niet jouw eigendom, wat verwarrend kan zijn in je homedirectory (hoewel niet per se problematisch):
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
Aangezien dit de eerste keer is dat ik postgres naar die datadirectory laat verwijzen, zullen we zien dat het de database initialiseert:
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:
Nu kan ik er vanuit een ander venster verbinding mee maken...
$ 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.
...en wat gegevens aanmaken:
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)
Nu verlaat ik de container:
^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
We kunnen verifiëren dat het niet meer actief is:
$ docker ps | grep postgres
Maar als we het opnieuw opstarten met dezelfde opdrachtregelargumenten;
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
We zien dat de database niet wordt geïnitialiseerd, omdat deze al bestaat, en we gaan meteen door naar:
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
Op dit punt kunnen we opnieuw verbinding maken met de database en ontdekken dat onze gegevens nog steeds bestaan:
$ 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)
Dat is zo'n beetje alles.