Het andere antwoord wijst inderdaad naar de oorzaak van het probleem, maar de helppagina waarnaar het verwijst, bevat geen oplossing. Dit is wat ik heb bedacht om dit voor mij te laten werken:
- start de container met uw normale docker-compose-bestand, dit creëert de map met de hardcoded 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
- stop de container en verander handmatig het eigendom in uid:gid je wilt (ik gebruik 1000:1000 voor dit voorbeeld
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Bewerk uw docker-bestand om uw gewenste uid:gid toe te voegen en start het opnieuw op met docker-compose (let op de
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
De reden waarom je niet gewoon user:
. kunt gebruiken vanaf het begin is dat als de afbeelding als een andere gebruiker wordt uitgevoerd, het de gegevensbestanden niet kan maken.
Op de afbeeldingsdocumentatiepagina
, het vermeldt wel een oplossing om een volume toe te voegen om de /etc/passwd
bestand als alleen-lezen in de afbeelding bij het verstrekken van --user
optie werkte echter niet voor mij met de nieuwste afbeelding, omdat ik de volgende foutmelding kreeg. In feite werkte geen van de drie voorgestelde oplossingen voor mij.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted