EMZETT.
Login

Docker: port is already allocated

Kurz: Der Host-Port, den der Container nutzen soll, ist schon von einem anderen Container oder Programm belegt.

Genauer: Meldung: Bind for 0.0.0.0:8080 failed: port is already allocated oder address already in use. Ein Port kann auf einem Rechner nur von einem Prozess gleichzeitig verwendet werden.

Im Detail

Ursachen

  • Ein anderer Container läuft mit demselben Host-Port (-p 8080:80).
  • Ein lokales Programm (zum Beispiel Entwicklungsserver, Nginx, lokale Datenbank) nutzt den Port.
  • Ein alter Container läuft noch oder hängt (docker ps -a).
  • Mehrere Compose-Projekte mit identischen Ports.

Lösungswege

  1. Prüfen, wer den Port belegt: docker ps (Container), ss -ltnp | grep 8080 bzw. lsof -i :8080 (Linux/macOS), netstat -ano | findstr 8080 (Windows).
  2. Alten Container stoppen/entfernen: docker stop name && docker rm name, oder in Compose docker compose down.
  3. Anderen Host-Port wählen: -p 8081:80 (links Host, rechts Container).
  4. Das störende Programm beenden.
  5. In docker-compose.yml die ports-Einträge prüfen; innerhalb eines Netzes brauchen Container keine veröffentlichten Ports, sie sprechen sich über Namen an.

Hinweis

Merke: -p HOST:CONTAINER. Der Container-Port darf überall 80 sein, der Host-Port muss frei sein. Veröffentliche Ports nur dort, wo sie nötig sind, und bei Servern nur auf 127.0.0.1 (-p 127.0.0.1:8080:80), damit sie nicht aus dem Netz erreichbar sind.

Siehe auch: EADDRINUSE, Docker, Docker Volumes und Netzwerke