PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Berechtigungsproblem mit PostgreSQL im Docker-Container

Die andere Antwort weist zwar auf die Ursache des Problems hin, die Hilfeseite, auf die sie verweist, enthält jedoch keine Lösung. Hier ist, was ich mir ausgedacht habe, damit dies für mich funktioniert:

  1. Starten Sie den Container mit Ihrer normalen Docker-Compose-Datei, dies erstellt das Verzeichnis mit der fest codierten 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. Halten Sie den Container an und ändern Sie den Besitz manuell auf die gewünschte uid:gid (ich werde 1000:1000 für dieses Beispiel verwenden
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data 
  1. Bearbeiten Sie Ihre Docker-Datei, um die gewünschte uid:gid hinzuzufügen, und starten Sie sie erneut mit docker-compose (beachten Sie den 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

Der Grund, warum Sie nicht einfach user: verwenden können von Anfang an ist, dass es die Datendateien nicht erstellen kann, wenn das Image unter einem anderen Benutzer ausgeführt wird.

Auf der Bilddokumentationsseite , wird eine Lösung erwähnt, um ein Volume hinzuzufügen, um /etc/passwd verfügbar zu machen Datei als schreibgeschützt im Bild, wenn --user angegeben wird Option, die jedoch mit dem neuesten Image bei mir nicht funktionierte, da ich den folgenden Fehler erhielt. Tatsächlich hat keine der drei vorgeschlagenen Lösungen für mich funktioniert.

initdb: error: could not change permissions of directory "/var/lib/postgresql/data": Operation not permitted