Docker - Bindung für 0.0.0.0:4000 fehlgeschlagen: Port ist bereits zugewiesen

77

Ich verwende Docker zum ersten Mal und habe versucht, dies zu implementieren - https://docs.docker.com/get-started/part2/#tag-the-image

Irgendwann habe ich versucht, über diesen Befehl eine Verbindung mit localhost herzustellen -

$ curl http://localhost:4000

welches diesen Fehler zeigte-

curl: (7) Failed to connect to localhost port 4000: Connection refused

Ich habe dies jedoch durch folgenden Code gelöst:

$ docker-machine ip default
$ curl http://192.168.99.100:4000

Danach lief alles gut, aber im letzten Teil habe ich versucht, die App mithilfe der folgenden Zeile gemäß dem Tutorial auszuführen ...

$ docker run -p 4000:80 anibar/get-started:part1

Aber ich habe diesen Fehler bekommen

C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint goofy_bohr (63f5691ef18ad6d6389ef52c56198389c7a627e5fa4a79133d6bbf13953a7c98): Bind for 0.0.0.0:4000 failed: port is already allocated.

Es scheint, dass der Port zugewiesen ist. Können Sie mir bitte helfen, indem Sie mir mitteilen, wie ich das lösen kann? Vielen Dank :)

Anik Barua
quelle

Antworten:

130

Sie müssen sicherstellen, dass der zuvor gestartete Container beendet wird, bevor Sie einen neuen Container starten, der denselben Port verwendet.

docker container ls
docker rm -f <container-name>
Yamenk
quelle
39

Wenn Sie IgorBeaz Tribut zollen, müssen Sie den aktuellen Container nicht mehr ausführen. Dazu kennen Sie die aktuelle CONTAINER ID:

$ docker container ls

Sie erhalten so etwas wie:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
12a32e8928ef        friendlyhello       "python app.py"     51 seconds ago      Up 50 seconds       0.0.0.0:4000->80/tcp   romantic_tesla   

Dann stoppen Sie den Container durch:

$ docker stop 12a32e8928ef

Schließlich versuchen Sie zu tun, was Sie tun wollten, zum Beispiel:

$ docker run -p 4000:80 friendlyhello

quelle
11

Die obigen zwei Antworten sind richtig, haben aber bei mir nicht funktioniert.

  1. Ich sah immer wieder leer wie unten für docker container lsGeben Sie hier die Bildbeschreibung ein
  2. dann habe ich es versucht docker container ls -aund danach wurde der gesamte Prozess angezeigt, der zuvor beendet wurde und ausgeführt wurde.
  3. Dann docker stop <container id>oder docker container stop <container id>nicht funktioniert
  4. dann habe ich es versucht docker rm -f <container id>und es hat funktioniert.
  5. Jetzt habe ich es versucht docker container ls -aund dieser Prozess war nicht vorhanden.
paul
quelle
2
Auch nach dem Entfernen aller Docker aus der Archivoption (-a) wird immer noch der Fehler angezeigt. Fehler beim Starten des Userland-Proxys: Bindung für 0.0.0.0:8080 fehlgeschlagen: Port ist bereits zugewiesen.
BrB
Vielleicht besetzt etwas anderes diesen Hafen. Finden Sie heraus und beenden Sie den Prozess, falls nicht erforderlich, und Ihr Port ist frei.
Paul
11

Ich habe es so gelöst:

Zuerst habe ich alle laufenden Container gestoppt:

docker-compose down

Dann habe ich einen lsofBefehl ausgeführt, um den Prozess über den Port zu finden (für mich war es Port 9000).

sudo lsof -i -P -n | grep 9000

Schließlich habe ich den Prozess "beendet" (in meinem Fall war es eine VSCode-Erweiterung):

kill -9 <process id>
Alexandre Lara
quelle
1
Nach dem Rat von Yamenks akzeptierter Antwort wurden keine Behälter verwendet. Diese Antwort hat mir geholfen, den Prozess über den Port aufzuspüren. Wenn diese Antwort auch Informationen zum Überprüfen des aktiven Dockers enthält, sollte dies die akzeptierte Antwort sein. "Port ist bereits zugewiesen" bedeutet nicht immer "Docker-Container läuft bereits"
TPHughes
4

Für alle, die dieses Problem haben docker-compose. Wenn Sie mehr als ein Projekt (dh in verschiedenen Ordnern) mit ähnlichen Diensten haben, müssen Sie es docker-compose stop in jedem Ihrer anderen Projekte ausführen .

jeder Mann
quelle
Das hat es geschafft! Danke für den Tipp!
Gadgetroid
4

Ich hatte das gleiche Problem mit Docker-Compose:

  1. Docker-Proxy-Prozess getötet.
  2. Starten Sie Docker neu
  3. Starten Sie Docker-Compose erneut.
KIA CEED
quelle
4

Ich habe alle oben genannten Antworten ausprobiert, keine davon hat funktioniert, in meinem Fall wird sogar docker container lskein Container angezeigt. Es sieht so aus, als ob das Problem auf die Tatsache zurückzuführen ist, dass der Docker-Proxy weiterhin Ports verwendet, auch wenn keine Container ausgeführt werden. In meinem Fall habe ich Ubuntu verwendet. Folgendes habe ich versucht und das Problem gelöst. Führen Sie einfach die folgenden zwei Befehle aus:

- -sudo service docker stop

- -sudo rm -f /var/lib/docker/network/files/local-kv.db

Fahima Mokhtari
quelle
3

docker pszeigt die Liste der Container an, die auf Docker ausgeführt werden.
Suchen Sie diejenige, die auf Ihrem benötigten Port ausgeführt wird, notieren Sie sich den PID-

Stopp und entfernen Sie diesen Container mit den folgenden Befehlen.
docker stop PID
docker rm PID
Führen Sie nun docker-compose up aus. Ihre Dienste sollten ausgeführt werden, sobald Sie den benötigten Port freigegeben haben.

Akshay Vijay Jain
quelle
2

Das Anhalten des Containers hat auch bei mir nicht funktioniert. Ich habe den Port geändert docker-compose.yml.

Morgan
quelle