Druhá odpověď skutečně ukazuje na hlavní příčinu problému, ale stránka nápovědy, na kterou odkazuje, řešení neobsahuje. Tady je to, co jsem vymyslel, aby mi to fungovalo:
- spusťte kontejner pomocí normálního souboru docker-compose, tím se vytvoří adresář s pevně zakódovaným uid:gid (999:999)
version: '3.7'
services:
db:
image: postgres
container_name: postgres
volumes:
- ./data:/var/lib/postgresql/data
environment:
POSTGRES_USER: fake_database_user
POSTGRES_PASSWORD: fake_database_PASSWORD
- zastavte kontejner a ručně změňte vlastnictví na požadované uid:gid (pro tento příklad použiji 1000:1000
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Upravte soubor dockeru, přidejte požadované uid:gid a spusťte jej znovu pomocí docker-compose (všimněte si
user:
)
version: '3.7'
services:
db:
image: postgres
container_name: postgres
volumes:
- ./data:/var/lib/postgresql/data
user: 1000:1000
environment:
POSTGRES_USER: fake_database_user
POSTGRES_PASSWORD: fake_database_password
Důvod, proč nemůžete jednoduše použít user:
od začátku je, že pokud je obraz spuštěn jako jiný uživatel, nepodaří se vytvořit datové soubory.
Na stránce dokumentace k obrázku
, zmiňuje řešení, jak přidat svazek k odhalení souboru /etc/passwd
soubor jako pouze pro čtení v obrázku při poskytnutí --user
možnost, která mi však s nejnovějším obrázkem nefungovala, protože jsem dostával následující chybu. Ve skutečnosti žádné ze tří navrhovaných řešení pro mě nefungovalo.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted