sql >> Databasteknik >  >> RDS >> PostgreSQL

Behörighetsproblem med PostgreSQL i dockercontainer

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:

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

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


  1. Postgres / hibernate-operatorn finns inte:text =bytea

  2. Filtrera Power BI-rapport baserat på nuvarande användare

  3. Fråga för att ta bort unik eller primär nyckel från MYsql-tabellen

  4. Hur man utesluter poster med vissa värden i sql select