L'altra risposta punta effettivamente alla causa principale del problema, tuttavia la pagina della guida a cui punta non contiene una soluzione. Ecco cosa mi è venuto in mente per farlo funzionare per me:
- avvia il contenitore usando il tuo normale file docker-compose, questo crea la directory con l'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
- interrompi il contenitore e modifica manualmente la proprietà in uid:gid che desideri (per questo esempio userò 1000:1000
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data
- Modifica il tuo file docker per aggiungere l'uid:gid desiderato e riavvialo usando docker-compose (nota l'
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
Il motivo per cui non puoi semplicemente usare user:
dall'inizio è che se l'immagine viene eseguita come un utente diverso non riesce a creare i file di dati.
Nella pagina della documentazione dell'immagine
, menziona una soluzione per aggiungere un volume per esporre il /etc/passwd
file come di sola lettura nell'immagine quando si fornisce --user
opzione, tuttavia, che non ha funzionato per me con l'ultima immagine, poiché stavo ricevendo il seguente errore. In effetti nessuna delle tre soluzioni proposte ha funzionato per me.
initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted