J'ai suivi plusieurs tutoriels différents ainsi que celui officiel. Cependant, chaque fois que j'essaie d'installer PostgreSQL dans un conteneur, le message suivant s'affiche
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
J'ai parcouru plusieurs questions ici sur SO et sur Internet, mais sans succès.
Le problème est que votre application/projet tente d'accéder au fichier de socket postgres de la machine hôte (pas du conteneur docker).
Pour le résoudre, il faut soit demander explicitement une connexion TCP/IP en utilisant l'indicateur -p
pour configurer un port pour le conteneur postgres, soit partager le socket Unix avec le maching de l'hôte en utilisant l'indicateur -v
.
Remarque: L'utilisation de l'indicateur -v
ou --volume=
signifie que vous partagez un espace entre la machine hôte et le conteneur de menu fixe. Cela signifie que si postgres est installé sur votre ordinateur hôte et qu'il fonctionne, vous rencontrerez probablement des problèmes.
Ci-dessous, je montre comment exécuter un conteneur postgres accessible à la fois à partir de TCP/IP et de socket Unix. De plus, je nomme le conteneur sous la forme postgres
.
docker run -p 5432:5432 -v /var/run/postgresql:/var/run/postgresql -d --name postgres postgres
Il existe d'autres solutions, mais celle-ci me semble la plus appropriée. Enfin, si l'application/le projet qui nécessite un accès est également un conteneur, il est préférable de simplement les lier.
Voici les instructions pour corriger cette erreur qui devrait également fonctionner pour votre conteneur Docker: Erreur PostgreSQL 'Impossible de se connecter au serveur: Aucun fichier ou répertoire de ce type'
Si cela ne fonctionne pas pour quelque raison que ce soit, de nombreux conteneurs docker Postgresql disponibles dans le commerce que vous pouvez consulter à titre de référence dans l'index Docker: https://index.docker.io/search?q=postgresql
La plupart des conteneurs sont construits à partir de repos reposant sur github. Donc, si vous en trouvez un qui semble répondre à vos besoins, vous pouvez en consulter la source.
Le projet Flynn a également inclus une appliance postgresql qui pourrait valoir la peine d’être vérifiée: https://github.com/flynn/flynn-postgres
Par défaut, psql
tente de se connecter au serveur à l'aide d'un socket UNIX. C'est pourquoi nous voyons /var/run/postgresql/.s.PGSQL.5432 - un emplacement du descripteur de socket UNIX.
Si vous exécutez postgresql-server in docker avec liaison de port, vous devez donc indiquer psql
pour utiliser TCP-socket. Ajoutez juste param:
psql -h localhost [any other params]
DE postgres: 9,6
RUN apt-get update & apt-get install -q -y postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6 postgresql-client-common postgresql-common RUN echo postgres: postgres | chpasswd
RUN pg_createcluster 9.6 main --start
RUN /etc/init.d/postgresql start
RUN su -c "psql -c \" ALTER USER postgres PASSWORD 'postgres';\"" postgres