PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Problème d'autorisation avec PostgreSQL dans le conteneur docker

L'autre réponse indique en effet la cause première du problème, mais la page d'aide vers laquelle elle pointe ne contient pas de solution. Voici ce que j'ai trouvé pour que cela fonctionne pour moi :

  1. démarrez le conteneur en utilisant votre fichier docker-compose normal, cela crée le répertoire avec l'uid codé en dur :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. arrêtez le conteneur et changez manuellement la propriété en uid:gid que vous voulez (j'utiliserai 1000:1000 pour cet exemple
$ docker stop postgres
$ sudo chown -R 1000:1000 ./data 
  1. Modifiez votre fichier docker pour ajouter votre uid:gid souhaité et redémarrez-le à l'aide de docker-compose (remarquez le 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

La raison pour laquelle vous ne pouvez pas simplement utiliser user: depuis le début est que si l'image s'exécute sous un autre utilisateur, elle ne parvient pas à créer les fichiers de données.

Sur la page de documentation des images , il mentionne une solution pour ajouter un volume pour exposer le /etc/passwd fichier en lecture seule dans l'image lors de la fourniture de --user option, cependant, cela ne fonctionnait pas pour moi avec la dernière image, car j'obtenais l'erreur suivante. En fait, aucune des trois solutions proposées n'a fonctionné pour moi.

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