Dzieje się tak z powodu niezgodności uprawnień użytkownika w kontenerze dockera.
Lista odpowiednich plików w kontenerze:
$ docker exec <container> ls -l /var/lib/postgresql/data/pg_stat_tmp
-rw------- 1 root root [...] db_0.stat
-rw------- 1 root root [...] db_1.stat
-rw------- 1 root root [...] db_2.stat
-rw------- 1 postgres postgres [...] global.stat
widzimy, że wszystkie db_*.stat
pliki są własnością root:root
, natomiast global.stat
należy do postgres:postgres
.
Sprawdzenie użytkownika dockera daje nam:
$ docker exec <container> whoami
root
Chcielibyśmy więc, aby wszystkie te pliki należały do użytkownika postgres. Na szczęście jest to całkiem proste! Po prostu ustaw użytkownika na postgres
i uruchom ponownie!
W pliku docker:
USER postgres
Korzystanie z docker-compose:
services:
postgres:
image: postgres:13
user: postgres