Druga odpowiedź rzeczywiście wskazuje na pierwotną przyczynę problemu, jednak strona pomocy, na którą wskazuje, nie zawiera rozwiązania. Oto, co wymyśliłem, aby to działało dla mnie:
- uruchom kontener przy użyciu normalnego pliku docker-compose, spowoduje to utworzenie katalogu z zakodowanym na stałe 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
- zatrzymaj kontener i ręcznie zmień własność na uid:gid, który chcesz (w tym przykładzie użyję 1000:1000
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Edytuj plik docker, aby dodać żądany uid:gid i uruchom go ponownie za pomocą docker-compose (zwróć uwagę na
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
Powód, dla którego nie możesz po prostu użyć user:
od początku jest to, że jeśli obraz działa jako inny użytkownik, nie udaje się utworzyć plików danych.
Na stronie dokumentacji obrazów
, wspomina o rozwiązaniu polegającym na dodaniu woluminu w celu ujawnienia /etc/passwd
plik jako tylko do odczytu w obrazie przy podawaniu --user
jednak opcja ta nie działała dla mnie z najnowszym obrazem, ponieważ otrzymywałem następujący błąd. W rzeczywistości żadne z trzech proponowanych rozwiązań nie zadziałało dla mnie.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted