PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Problema di autorizzazione con PostgreSQL nel contenitore Docker

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:

  1. 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
  1. 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 
  1. 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