Trebuie să uniți două piese ale puzzle-ului aici:
https://www.postgresql.org/docs/9.5/app-initdb.html
initdb, vă învață cum să transmiteți informații de codificare la funcția de creare a bazei de date.
Imaginea oficială Postgres Docker, afirmă că puteți trece opțiuni, la initdb:
https://hub.docker.com/_/postgres
Ergo, răspunsul ar fi ceva de genul:
Bază de date:
imagine: postgres:latest
volume:
- db:/var/lib/postgresql/data
mediu inconjurator:
POSTGRES_PASSWORD: test
POSTGRES_INITDB_ARGS: '--encoding=UTF-8 --lc-colate=C --lc-ctype=C'
Sau argumente similare. Am ignorat opțiunea lang, deoarece aceasta nu este o opțiune oficială „transmite acest steag la postgres” pe pagina de manual (primul link pe care l-am inclus).
Testele mele nu au rulat acest lucru folosind docker compose, ci a fost pe linia de comandă folosind opțiunea -e. Acesta este însă exact același concept; „mediu” în docker compose este -e pe linia de comandă. Adica:
https://docs.docker.com/engine/reference/commandline/run/
--env , -e Setează variabilele de mediu
Testul #1 cu doar parola env setată:
docker run -e POSTGRES_PASSWORD=test postgres:latest
Iată rezultatul rulării implicite:
postgres@cbf23636dabc:~$ psql
psql (13.4 (Debian 13.4-1.pgdg100+1))
Tastați „ajutor” pentru ajutor.
postgres=# \l
Lista bazelor de date
Nume | Proprietar | Codificare | Colate | Ctype | Privilegii de acces
-----------+----------+----------+------------+--- ---------+------------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
Testul #2, cu variabilele de mediu setate ca mai sus în dockerul sugerat compus numai pe CLI:
rulare docker -e POSTGRES_PASSWORD=test -e POSTGRES_INITDB_ARGS='--encoding=UTF-8 --lc-collate=C --lc-ctype=C' postgres:latest
Și apoi rezultatul:
postgres@b6b80c876f3e:~$ psql
psql (13.4 (Debian 13.4-1.pgdg100+1))
Tastați „ajutor” pentru ajutor.
postgres=# \l
Lista bazelor de date
Nume | Proprietar | Codificare | Colate | Ctype | Privilegii de acces
-----------+----------+----------+---------+------ -+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
Rețineți, de asemenea, secțiunea de pe pagina oficială a imaginii Postgresql Docker, unde descrie scripturile de inițializare. Acesta este ceva la care te poți uita și tu.