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
- Prüfen, wer den Port belegt:
docker ps(Container),ss -ltnp | grep 8080bzw.lsof -i :8080(Linux/macOS),netstat -ano | findstr 8080(Windows). - Alten Container stoppen/entfernen:
docker stop name && docker rm name, oder in Composedocker compose down. - Anderen Host-Port wählen:
-p 8081:80(links Host, rechts Container). - Das störende Programm beenden.
- In
docker-compose.ymldieports-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