Docker “all predefined address pools have been fully subnetted” Hatası Çözüm Rehberi
Sorun Nedir?
Docker ile yeni bir ağ (network) oluşturmaya çalıştığınızda şu hatayı alıyorsanız:
failed to create network kasm_default: Error response from daemon: all predefined address pools have been fully subnetted
Bu hata, Docker’ın varsayılan IP adres havuzlarının tamamen tükendiğini gösterir.
Sorunun Sebepleri
- Birikmiş eski Docker network’leri – Kullanılmayan ancak silinmemiş network’ler havuzu tüketir
- Docker’ın varsayılan IP havuzu tükenmiştir – Her yeni network varsayılan olarak
/20(4.094 IP adresi) boyutunda oluşur ve bu hızla havuz dolar - Aşırı sayıda Docker Compose projesi – Her proje kendi network’ünü oluşturur
Çözüm Adımları
1. Mevcut Network’leri Listeleyin ve Temizleyin
# Tüm network'leri listele
docker network ls
# Kullanılmayan network'leri sil
docker network prune
# Daha agresif temizlik (tüm kullanılmayan network'leri siler)
docker network prune -a
2. Docker Yapılandırma Dosyasını Kontrol Edin
# Docker dizinini kontrol et
ls -l /etc/docker/
Eğer daemon.json dosyası yoksa (bu normaldir), siz oluşturmanız gerekecektir.
3. default-address-pools Ayarlarını Yapılandırma
Docker’ın varsayılan IP havuz boyutunu daha makul bir değere düşürmek sorunu kalıcı olarak çözecektir.
/etc/docker/daemon.json dosyasını oluşturun veya düzenleyin:
sudo nano /etc/docker/daemon.json
Aşağıdaki yapılandırmayı ekleyin:
{
"log-level": "warn",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "5"
},
"default-address-pools": [
{
"base": "172.16.0.0/12",
"size": 24
}
]
}
Açıklamalar:
"base": "172.16.0.0/12"– Docker’ın kullanacağı IP aralığı (172.16.0.0 – 172.31.255.255)"size": 24– Her network için/24(254 kullanılabilir IP) – ev kullanımı için fazlasıyla yeterli
⚠️ Eğer ev ağınız
192.168.x.xaralığını kullanıyorsa,baseolarak172.16.0.0/12kullanmak çakışmayı önler.
4. Docker Servisini Yeniden Başlatın
# Docker servisini yeniden başlat
sudo systemctl restart docker
# Durumunu kontrol et
sudo systemctl status docker
# Hata olup olmadığını kontrol et
journalctl -u docker -n 50
Önleyici Tedbirler
- Düzenli olarak
docker network prunekomutunu çalıştırın - Gereksiz container ve network’leri hemen silin
- Docker Compose projelerinde
network: externalkullanarak network paylaşımı yapın - Log boyutlarını sınırlandırın (yukarıdaki yapılandırmada yapıldı)
Alternatif Çözüm
Eğer hala sorun yaşıyorsanız, daha büyük bir IP havuzu tanımlayabilirsiniz:
{
"default-address-pools": [
{
"base": "10.0.0.0/8",
"size": 24
}
]
}
Bu, 10.x.x.x aralığının tamamını (16 milyon+ IP) kullanıma açar.