Det andra svaret pekar verkligen på grundorsaken till problemet, men hjälpsidan det pekar på innehåller ingen lösning. Här är vad jag kom på för att få det här att fungera för mig:
- starta behållaren med din vanliga docker-compose-fil, detta skapar katalogen med den hårdkodade 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
- stoppa behållaren och ändra ägarskapet manuellt till uid:gid du vill ha (jag använder 1000:1000 för det här exemplet
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Redigera din docker-fil för att lägga till önskad uid:gid och starta upp den igen med docker-compose (lägg märke till
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
Anledningen till att du inte bara kan använda user:
från början är att om bilden körs som en annan användare så misslyckas den med att skapa datafilerna.
På sidan för bilddokumentation
, nämner den en lösning för att lägga till en volym för att exponera /etc/passwd
fil som skrivskyddad i bilden när du tillhandahåller --user
alternativet, men det fungerade inte för mig med den senaste bilden, eftersom jag fick följande fel. Faktum är att ingen av de tre föreslagna lösningarna fungerade för mig.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted