Ik probeer postgres te starten in een docker-container op mijn Mac, maar ik krijg steeds de volgende foutmelding
docker: Foutreactie van daemon: stuurprogramma kan externe connectiviteit niet programmeren op eindpunt postgres (8392b9e5cfaa28f480fe1009dee461f97e82499726f4afc4e916358dd2d2f61e): Fout bij starten van userland-proxy: binden van tcp 0.0.0.0:5432 adres is al in gebruik.
Ik heb postgres lokaal geïnstalleerd, maar ik ben ermee gestopt en actief
pg_ctl status
retouren
pg_ctl: geen server actief
Ik heb het volgende uitgevoerd om te controleren wat er draait op 5432
lsof -i tcp:5432
&
netstat -anp tcp | grep 5432
en er draait niets op de poort.
Versies
Mac – OS X El Capitan versie 10.11.2
PostgreSQL – 9.5
Docker – Docker versie 1.12.0-rc2, build 906eacd, experimenteel
Antwoord 1, autoriteit 100%
Als lsof -i :5432
geen uitvoer laat zien, kun je sudo ss -lptn 'sport = :5432'
gebruiken om te zien welk proces gebonden is naar de haven.
Ga verder met kill <pid>
Antwoord 2, autoriteit 60%
Als je lsof -i :5432
uitvoert op de host, kun je zien welk proces aan de poort is gebonden.
Er is een exemplaar van Postgres actief. Je kunt kill <pid>
uitvoeren om het te doden als je wilt. U kunt ook 5432
gebruiken in plaats van 5432:5432
in uw docker-opdracht of docker-compose-bestand en docker automatisch de hostpoort laten kiezen.
Antwoord 3, autoriteit 35%
Het eerste dat u moet doen, is de PostgreSQL-service stoppen.
In de meeste gevallen is het probleem hiermee verholpen.
sudo service postgresql stop
Als bovenstaande niet werkt. voeg vervolgens de volgende regel toe aan /etc/postgresql/12/main/postgresql.conf
sudo vim /etc/postgresql/12/main/postgresql.conf
## good if you add under CONNECTION AND AUTHENTICATION comments
listen_addresses = "*"
Antwoord 4, autoriteit 3%
In sommige gevallen is het van cruciaal belang om een meer diepgaande foutopsporing voor het probleem uit te voeren voordat de container/het proces wordt gestopt of beëindigd.
Overweeg de onderstaande checklist te volgen:
1) Controleer uw huidige docker-opstelomgeving
Voer docker-compose ps
uit.
Als de poort in gebruik is door een andere container, stop deze dan met docker-compose stop <service-name-in-compose-file>
of verwijder het door stop
te vervangen door rm
.
2) Controleer de containers die buiten uw huidige werkruimte draaien
Voer docker ps
uit om een lijst te zien van alle containers die onder uw host draaien.
Als u merkt dat de poort in gebruik is door een andere container, kunt u deze stoppen met docker stop <container-id>
.
(*) Omdat u niet onder het bereik van de oorspronkelijke compose
-omgeving valt, is het een goede gewoonte om eerst docker inspectom meer informatie te verzamelen over de container die u gaat stoppen.
3) Controleer of poort wordt gebruikt door andere processen die op de host draaien
Als de poort bijvoorbeeld 6379 is, voer dan het volgende uit:
$ sudo netstat -ltnp | grep ':6379'
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 915/redis-server 12
tcp6 0 0 ::1:6379 :::* LISTEN 915/redis-server 12
(*) U kunt ook de lsofgebruiken commando dat voornamelijk wordt gebruikt om informatie op te halen over bestanden die door verschillende processen worden geopend (ik raad aan om daarvoor netstat
uit te voeren).
Dus, in het geval van de uitvoer boven de PID
is 915
. Nu kunt u het volgende uitvoeren:
$ ps j 915
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 915 915 915 ? -1 Ssl 123 0:11 /usr/bin/redis-server 127.0.0.1:6379
En bekijk de ID van het bovenliggende proces (PPID
) en het uitvoeringscommando.
U kunt ook het volgende uitvoeren: $ pstree -s <PID>
voor een visuele weergave van het proces en de bijbehorende processen (installeren met: brew install pstree
).
In ons geval kunnen we zien dat het proces waarschijnlijk een daemon is (PPID is 1) – Overweeg in dat geval het volgende uit te voeren:
A) $ cat /proc/<PID>/status
om meer diepgaande informatie over het proces te krijgen, zoals het aantal threads dat door het proces is voortgekomen, de mogelijkheden, enz’.
B) $ systemctl status <PID>
om de systemd-eenheid die de creatie van een specifiek proces heeft veroorzaakt. Als de service niet kritiek is, kunt u stop en schakel de service uit.
4) Herstart Docker-service
Voer sudo service docker restart
uit.
5) Je hebt dit punt bereikt en..
Alleen als het uw systeem niet in gevaar brengt, kunt u overwegen de server opnieuw op te starten.
Antwoord 5
Ga naar project en klik op docker-compose.yml
version: '2'
diensten:
web:
bouwen: .
poorten:
– “8000:8000”
volumes:
– .:/app
koppelingen:
– db
– mail server
db:
afbeelding: “postgres”
omgeving:
POSTGRES_PASSWORD: jager2
poorten:
– “5432:9432”
mail server:
afbeelding: “mailhog/mailhog”
bloot:
– 1025
poorten:
– “8026:8026”
”
verander de poorten in 8026:8026 omdat er al een andere container draait op dit poortnummer verander alleen het poortnummer”
Antwoord 6
Geen van deze andere antwoorden werkte voor mij. (Bijvoorbeeld, lsof en netstat hebben alleen lege regels geretourneerd.) Het volgende werkte echter:
sudo -u postgres pg_ctl -D /Library/PostgreSQL/13/data stop
Antwoord 7
het heeft voor mij gewerkt, waarschijnlijk moet je stoppen met postgres :
sudo systemctl stop postgresql
Antwoord 8
Ik heb geprobeerd sudo kill -9 <PID>
te gebruiken om het postgres-proces uit te schakelen, maar het verschijnt steeds weer met een andere PID. Daarna ontdekte ik dat het een proces opslaat onder LaunchDemos
en dat het bij elke opstart wordt uitgevoerd:
cd /Library/LaunchDemos/
sudo rm com.edb.launchd.postgresql-13.plist
- Start uw pc opnieuw op om wijzigingen toe te passen.
Antwoord 9
Als je sudo lsof -i :5432 op de host uitvoert, kun je zien welk proces aan de poort is gebonden.
- sudo service postgresql stop
- while lsof -Pi :5432 -sTCP:LISTEN -t; do sleep 1; done