Wenn ich docker-compose up
in meinem Docker-Projekt ausgeführt werde, schlägt die folgende Meldung fehl:
Error starting userland proxy: listen tcp 0.0.0.0:3000: bind: address already in use
netstat -pna | grep 3000
zeigt dies:
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN -
Ich habe es bereits versucht docker-compose down
, aber es hilft nicht.
ubuntu
docker
ubuntu-14.04
bind
docker-compose
Ngoral
quelle
quelle
sudo netstat -pna | grep 3000
, um den Prozess abzurufen, der zuhört.sudo
, um den Prozessnamen zu sehen.sudo
kann die Ausgabe ändern :)Antworten:
In Ihrem Fall war es ein anderer Prozess, der den Port verwendete und
sudo netstat -pna | grep 3000
Ihnen, wie in den Kommentaren angegeben, bei der Lösung des Problems half.In anderen Fällen (ich selbst bin oft darauf gestoßen) handelt es sich meistens um denselben Container, der in einer anderen Instanz ausgeführt wird. In diesem Fall
docker ps
war es sehr hilfreich, da ich oft dieselben Container in anderen Verzeichnissen laufen ließ und dann erneut versuchte, sie an anderen Stellen auszuführen, an denen dieselben Containernamen verwendet wurden.Wie
docker ps
mir geholfen hat:docker rm -f $(docker ps -aq)
ist ein kurzer Befehl, mit dem ich alle Container entferne.Edit: Hinzugefügt, wie
docker ps
mir geholfen hat.quelle
docker-compose down
hilftdocker-compose up
. Während ich in meiner Antwort empfehle, den Container zu finden, der bereits läuft, und die gewünschten Maßnahmen zu ergreifen. Ich fand es angemessen, sie zu entfernen. Wenn jemand sie nicht entfernen möchte, wird sie stattdessenrm
verwendetstop
, um sie zu stoppen.tensorflow/tensorflow
Image ausgeführt wird. Wie kann ich mein Image so einrichten, dass es an einem anderen Port ausgeführt wird? Ich habedocker run -it -d -p 8888:8000 tensorflow/tensorflow
Folgendes versucht: Ich habe Port 8888 von meinem Image auf dem Client an 8000 gebunden, aber es funktioniert nicht.-d
Option. Jetzt werden Ports als angezeigtHOST:CONTAINER
. So sollten Sie laufendocker run -it -p 8000:8888
Das hat mir geholfen:
docker-compose down # Stop container on current dir if there is a docker-compose.yml docker rm -fv $(docker ps -aq) # Remove all containers sudo lsof -i -P -n | grep <port number> # List who's using the port
und dann:
kill -9 <process id>
(macOS) odersudo kill <process id>
(Linux).Quelle: Kommentar des Benutzers Rub21 .
quelle
docker rm -fv $(docker ps -aq)
Diese Linie war alles was ich brauchte. Vielen DankIch hatte das gleiche Problem
docker-compose down --rmi all
(in dem gleichen Verzeichnis, in dem Sie Docker-Compose ausführen)hilft
quelle
down
ist das Letzte, was Sie normalerweise tun möchten. Den gegenwärtigen Zustand zu verlieren ist kein Stück Zucker.Für Linux / Unix:
Einfache Suche nach dem Linux-Dienstprogramm mit dem folgenden Befehl
Die an diesem Port ausgeführte Verarbeitung wird angezeigt. Anschließend wird der Prozess mithilfe der PID (suchen Sie nach einer PID in der Reihe) dieses Prozesses abgebrochen.
quelle
Ich hatte das gleiche Problem. Ich habe dies behoben, indem ich den Apache2-Dienst auf meinem Host gestoppt habe.
quelle
In meinem Fall war es
Und alles, was ich brauche, ist das Debug-Hören im PHP-Sturm auszuschalten
quelle
In einigen Fällen ist es wichtig, ein eingehenderes Debuggen des Problems durchzuführen, bevor ein Container gestoppt oder ein Prozess beendet wird.
Befolgen Sie die folgende Checkliste:
1) Überprüfen Sie die aktuellen Docker compose Umgebung
ausführen
docker-compose ps
.Wenn der Port von einem anderen Container verwendet wird, stoppen Sie ihn mit
docker-compose stop <service-name-in-compose-file>
oder entfernen Sie ihn durch Ersetzenstop
durchrm
.2) Überprüfen Sie die Container, die außerhalb Ihres aktuellen Arbeitsbereichs ausgeführt werden.
Führen
docker ps
Sie die Liste aller Container aus, die unter Ihrem Host ausgeführt werden.Wenn Sie feststellen, dass der Port von einem anderen Container verwendet wird, können Sie ihn mit stoppen
docker stop <container-id>
.(*) Da Sie sich nicht im Bereich der Ursprungsumgebung befinden,
compose
empfiehlt es sich, zuerst Docker Inspect zu verwenden, um weitere Informationen zu dem Container zu sammeln, den Sie stoppen möchten.3) Überprüfen Sie, ob der Port von anderen auf dem Host ausgeführten Prozessen verwendet wird.
Beispiel: Wenn der Port 6379 ausgeführt wird:
(*) Sie können auch den Befehl lsof verwenden, der hauptsächlich zum Abrufen von Informationen zu Dateien verwendet wird, die von verschiedenen Prozessen geöffnet werden (ich empfehle,
netstat
vorher ausgeführt zu werden).Also, im Falle der Ausgabe über dem
PID
ist915
. Jetzt können Sie ausführen:Und sehen Sie sich die ID des übergeordneten Prozesses (
PPID
) und den Ausführungsbefehl an.Sie können auch Folgendes ausführen:
$ pstree -s <PID>
zu einer visuellen Anzeige des Prozesses und der zugehörigen Prozesse.In unserem Fall können wir sehen, dass der Prozess wahrscheinlich ein Daemon ist (PPID ist 1). In diesem Fall sollten Sie Folgendes ausführen :
A)
$ cat /proc/<PID>/status
, um detailliertere Informationen über den Prozess zu erhalten, z. B. die Anzahl der vom Prozess erzeugten Threads. seine Fähigkeiten usw. '.B)
$ systemctl status <PID>
um die zu sehensystemdEinheit, die die Erstellung eines bestimmten Prozesses verursacht hat. Wenn der Dienst nicht kritisch ist, können Sie den Dienst beenden und deaktivieren .4) Starten Sie Docker Service
Run:
sudo service docker restart
.5) Sie haben diesen Punkt erreicht und ..
Nur wenn Ihr System dadurch nicht gefährdet wird, sollten Sie den Server neu starten.
quelle
Ich habe heute Nachmittag meinen Docker aktualisiert und bin auf dasselbe Problem gestoßen. Ich habe versucht, Docker neu zu starten, aber kein Glück.
Schließlich musste ich meinen Computer neu starten und es funktionierte. Auf jeden Fall ein Fehler.
quelle
Überprüfen
docker-compose.yml
Sie, ob der Port möglicherweise zweimal angegeben wird.quelle
Ich bin mehrmals auf dasselbe Problem gestoßen. Docker neu zu starten scheint den Trick zu tun
quelle
Ich behebe das Problem durch einen Neustart von Docker.
quelle
und starten Sie dann Ihren Computer neu
quelle
Eine Variation von @ DmitrySandalovs Antwort: Ich hatte Tomcat / Java auf 8080 laufen lassen, was weitergehen musste. Ich habe mir die Datei docker-compose.yml angesehen und den Eintrag für 8080 in einen anderen meiner Wahl geändert.
Hat perfekt funktioniert. (Die einzige Falte ist, dass die Änderung gelöscht wird, wenn ich das Projekt jemals aktualisiere, da es von einem externen Repo stammt.)
quelle
Nur eine Randnotiz, wenn Sie das gleiche Problem haben und mit Windows arbeiten:
In meinem Fall ist der Prozess in meinem Weg gerecht
grafana-server.exe
. Weil ich zuerst die Binärversion heruntergeladen und auf die ausführbare Datei doppelklickt habe und sie jetzt als Dienst des Benutzers startet,SYSTEM
den ich nicht kanntaskkill
(keine Berechtigung)Ich muss zum "Service Manager" von Windows gehen und nach dem Service "Grafana" suchen und ihn beenden. Danach ist Port 3000 nicht mehr besetzt.
Hoffentlich hilft das.
quelle
Derjenige, der den Port 8888 verwendete, war Jupiter, und ich musste die Konfigurationsdatei des Jupiter-Notebooks ändern, um auf einem anderen Port ausgeführt zu werden.
um aufzulisten, wer diesen bestimmten Port verwendet. sudo lsof -i -P -n | grep 9
Sie können den Port angeben, den Jupyter ausführen soll, indem Sie die folgende Zeile in ~ / .jupyter / jupyter_notebook_config.py auskommentieren / bearbeiten:
c.NotebookApp.port = 9999
Falls Sie keine jupyter_notebook_config.py haben, versuchen Sie, jupyter notebook --generate-config auszuführen. Weitere Informationen zur Jupyter-Konfiguration finden Sie hier.
quelle
Das Ändern von network_mode: "bridge" in "host" hat es für mich getan.
Dies mit
quelle
Bevor es lief auf: Docker run -d --name oracle -p 1521: 1521 -p 5500: 5500 qa / oracle Ich habe gerade den Port in Docker run -d --name oracle -p 1522: 1522 -p 5500 geändert: 5500 qa / Orakel
es hat gut funktioniert für mich!
quelle
Auf meinem Computer wurde von diesem Befehl keine PID
netstat -tulpn
für den verwendeten Port (8080) angezeigt , sodass ich ihn nicht beenden konnte. Das Beenden der Container und der Neustart des Computers funktionierten nicht. Also hatservice docker restart
Command Docker für mich neu gestartet (Ubuntu) und der Port wurde nicht mehr benutzt und ich bin ein glücklicher Kerl und mache mich auf den Weg zum Mittagessen.quelle
Ich habe den folgenden Fehler erhalten, als ich versucht habe, einen neuen Conatier-Listen-TCP 0.0.0.0:8080 zu starten: bind: Adresse wird bereits verwendet.
Lösung: netstat -tulnp | grep 8080
[[email protected] (aws_main) ~] # netstat -tulnp | grep 8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* HÖREN 12749 / java [[email protected] (aws_main) ~] #
töte -9 12749
Versuchen Sie dann, den Container neu zu starten, der funktionieren soll
quelle
Macht den Trick.
quelle