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:
- 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
- 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
- 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