EMZETT.
Giriş yap

Docker: port is already allocated

Kısaca: Konteynerin kullanması gereken ana makine portu başka bir konteyner ya da program tarafından zaten işgal edilmiş.

Biraz daha ayrıntılı: Mesaj: Bind for 0.0.0.0:8080 failed: port is already allocated veya address already in use. Bir port, bir makinede aynı anda yalnızca bir süreç tarafından kullanılabilir.

Ayrıntılı

Nedenler

  • Başka bir konteyner aynı ana makine portuyla çalışıyor (-p 8080:80).
  • Yerel bir program (örneğin geliştirme sunucusu, Nginx, yerel veritabanı) portu kullanıyor.
  • Eski bir konteyner hâlâ çalışıyor ya da takılı (docker ps -a).
  • Aynı portlara sahip birkaç Compose projesi.

Çözümler

  1. Portu kimin işgal ettiğini kontrol et: docker ps (konteynerler), ss -ltnp | grep 8080 veya lsof -i :8080 (Linux/macOS), netstat -ano | findstr 8080 (Windows).
  2. Eski konteyneri durdur/kaldır: docker stop ad && docker rm ad, ya da Compose’ta docker compose down.
  3. Başka bir ana makine portu seç: -p 8081:80 (ana makine solda, konteyner sağda).
  4. Engelleyen programı sonlandır.
  5. docker-compose.yml içindeki ports girdilerini kontrol et; bir ağ içinde konteynerlerin yayımlanmış portlara ihtiyacı yoktur, birbirlerine adla hitap ederler.

Not

Unutma: -p ANA:KONTEYNER. Konteyner portu her yerde 80 olabilir, ana makine portu boş olmalıdır. Portları yalnızca gerekli yerde yayımla ve sunucularda yalnızca 127.0.0.1’e (-p 127.0.0.1:8080:80) yayımla, böylece ağdan erişilemezler.

Ayrıca bak: EADDRINUSE, Docker, Docker birimleri ve ağları