1
votes

Erreur Docker - 5432: bind: adresse déjà utilisée

Avant, je pouvais exécuter docker-compose en utilisant le mappage de ports 5432: 5432, mais j'ai récemment reçu cette erreur:

tcp4       0      0  *.5432                 *.*                    LISTEN     
tcp6       0      0  *.5432                 *.*                    LISTEN 

J'ai parcouru tous les messages plus anciens relatifs à ce problème, mais n'ont pas encore été en mesure de le résoudre.

Je me suis rendu fou avec cette erreur la semaine dernière en essayant de comprendre comment arrêter tout processus en cours d'exécution sans succès.

J'ai essayé d'exécuter

netstat -anp tcp | grep 5432

qui ne renvoie aucun résultat (tant que mon pgadmin / serveur n'est pas en cours d'exécution)

J'ai également vu d'autres articles mentionner l'exécution

lsof -i tcp:5432

qui renvoie deux lignes:

Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address already in use

Mais je ne sais pas trop quoi faire de cette sortie?


0 commentaires

3 Réponses :


1
votes

Exécutez lsof -i tcp: 5432 avec les droits sudo:

sudo lsof -i tcp:5432

Un processus (très probablement PostgreSQL) écoute sur le port 5432, empêchant un autre d'écouter sur ce port. Arrêtez le processus, par ex. avec systemctl , vous pourrez alors démarrer votre docker PostgreSQL.


7 commentaires

Merci - donc cela renvoie deux résultats - dois-je ensuite tuer ces deux PID et réessayer? Pour ma vie, je ne sais pas où cela fonctionnerait - pgadmin est arrêté, le serveur est éteint et je n'ai aucun conteneur en cours d'exécution. Je devrais ajouter que j'ai essayé d'exécuter kill -9 mais j'ai obtenu l'erreur "opération non autorisée"


Vous pouvez tuer le processus via sudo kill [-9] (bien qu'il soit préférable d'utiliser le gestionnaire de processus sur votre système, par exemple systemd). Mais le problème se reproduira probablement après le prochain redémarrage, en supposant qu'un processus PostgreSQL soit lancé automatiquement.


Je vois - est-ce que la meilleure chose à faire est d'utiliser simplement un port différent si tel est le cas?


Bien sûr, c'est possible, mais cela signifierait que chaque application souhaitant se connecter à votre docker PostgreSQL doit explicitement utiliser ce port autre que celui par défaut.


Dans ce cas, existe-t-il un moyen de savoir quelle ressource pourrait utiliser ce port au démarrage à chaque fois et de l'éliminer de plus en plus? Ai-je essentiellement fait quelque chose de mal pour que cela se produise? Même en utilisant le sudo kill -9, deux nouveaux processus apparaissent chaque fois que j'en tue un


Bien sûr, il y en a. La façon dont vous contrôlez cela dépend de votre gestionnaire de processus. Je suppose que sur MacOS, il existe également une interface graphique vous permettant de configurer cela.


Pourquoi le port 80? Est-ce une faute de frappe?



-1
votes

Je viens de tomber sur ce post qui mentionnait spécifiquement l'installation home brew de postgres à l'origine de ce problème. La suppression de cette instance semble avoir immédiatement résolu le problème: https://github.com/PostgresApp/PostgresApp / issues / 210

brew remove postgresql


0 commentaires

1
votes

Il est possible que cela se produise en raison de plusieurs instances de postgres exécutées sur votre ordinateur.

Dans mon cas, j'avais précédemment installé postgres qui était toujours en cours d'exécution sur la machine à cause duquel postgres basé sur docker ne pouvait pas démarrer en raison de l'erreur ci-dessus. La désinstallation de postgres précédemment installés a permis de résoudre le problème.


0 commentaires