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
- Portu kimin işgal ettiğini kontrol et:
docker ps(konteynerler),ss -ltnp | grep 8080veyalsof -i :8080(Linux/macOS),netstat -ano | findstr 8080(Windows). - Eski konteyneri durdur/kaldır:
docker stop ad && docker rm ad, ya da Compose’tadocker compose down. - Başka bir ana makine portu seç:
-p 8081:80(ana makine solda, konteyner sağda). - Engelleyen programı sonlandır.
docker-compose.ymliçindekiportsgirdilerini 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ı