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