web-dev-qa-db-fra.com

Installer PostgreSQL dans un conteneur docker

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.

12
Hevlastka

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.

10
Vasspilka

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

2
toddsampson

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]

0
Timur Milovanov

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

0
mohanraj k