Docker ve Kubernetes Hataları: Kapsayıcı Teknolojilerde Sık Karşılaşılan Sorunlar ve Etkili Çözüm Stratejileri

22 kez okundu 13 dk 18 sn okuma süresi 4 Mart 2026
0 Yorum

Kapsayıcı teknolojiler, modern yazılım geliştirme ve dağıtım süreçlerinin temelini oluşturmaktadır. Docker ve Kubernetes, bu alandaki en güçlü ve yaygın kullanılan araçlardır. Uygulamaların tutarlı bir şekilde çalışmasını sağlama, kaynak verimliliğini artırma ve dağıtım süreçlerini otomatize etme gibi birçok avantaj sunsalar da, karmaşık yapıları nedeniyle zaman zaman hata kodları ve sorunlarla karşılaşmak kaçınılmazdır. Bu rehber, Docker ve Kubernetes ortamlarında sıkça karşılaşılan hata kodlarını detaylandırmakta, bu hataların temel nedenlerini açıklamakta ve etkili çözüm stratejileri sunmaktadır. Amacımız, geliştiricilerin ve operasyon ekiplerinin bu sorunları hızla teşhis etmelerine ve çözmelerine yardımcı olarak kesintisiz bir iş akışı sağlamaktır.

Docker Hataları ve Çözüm Stratejileri

Docker, uygulamaları izole edilmiş kapsayıcılarda çalıştırmak için kullanılan güçlü bir platformdur. Ancak, imaj oluşturma, kapsayıcı çalıştırma veya ağ yapılandırması sırasında çeşitli hatalarla karşılaşılabilir. Bu bölümde, en yaygın Docker hatalarını ve bunların üstesinden gelmek için atılması gereken adımları inceleyeceğiz.

1. Cannot connect to the Docker daemon

Neden: Bu hata genellikle Docker hizmetinin çalışmıyor olması, kullanıcı izinlerinin yetersiz olması veya Docker soketine erişim sorunlarından kaynaklanır.

  • Çözüm:
    • Docker hizmetini başlatın: sudo systemctl start docker veya sudo service docker start komutlarını kullanın.
    • Kullanıcınızı docker grubuna ekleyin: sudo usermod -aG docker $USER komutunu çalıştırın ve değişikliğin etkili olması için oturumu kapatıp tekrar açın veya sistemi yeniden başlatın.
    • Soket yolunu kontrol edin: DOCKER_HOST ortam değişkeninin doğru ayarlandığından emin olun. Varsayılan olarak unix:///var/run/docker.sock olmalıdır.

2. Image not found / No such image

Neden: İstenen Docker imajı yerel depoda bulunamıyor veya belirtilen isim/etiket (tag) yanlış. Bu, genellikle bir yazım hatası veya imajın henüz çekilmemiş olmasından kaynaklanır.

  • Çözüm:
    • İmaj adını ve etiketini dikkatlice kontrol edin. Küçük/büyük harf duyarlılığına dikkat edin.
    • docker images komutu ile yerel imajlarınızı listeleyin ve aradığınız imajın mevcut olduğundan emin olun.
    • İmajı Docker Hub’dan veya başka bir kayıt defterinden çekin: docker pull <image_name>:<tag>. Örneğin: docker pull nginx:latest.
    • Özel bir kayıt defteri kullanıyorsanız, docker login <registry_url> komutu ile kimlik doğrulamasını yaptığınızdan emin olun.

3. Port is already allocated / Bind for <port> failed: port is already in use

Neden: Kapsayıcının ana bilgisayar üzerinde yayınlamaya çalıştığı port (-p parametresi ile belirtilen) zaten başka bir uygulama veya kapsayıcı tarafından kullanılıyor. Bu, genellikle başka bir hizmetin aynı port üzerinde çalışması durumunda ortaya çıkar.

  • Çözüm:
    • Kullanılan portu değiştirmeyi deneyin: docker run -p <yeni_ana_bilgisayar_portu>:<kapsayıcı_portu> <image>. Örneğin, 80 yerine 8080 kullanın.
    • Portu kullanan süreci bulun ve durdurun: Linux için sudo lsof -i :<port> veya sudo netstat -tulpn | grep :<port>, Windows için netstat -ano | findstr :<port> komutlarını kullanın. Ardından ilgili süreci sonlandırın.
    • Mevcut çalışan kapsayıcıların port eşleşmelerini kontrol edin: docker ps komutu ile hangi kapsayıcıların hangi portları kullandığını görebilirsiniz.

4. Out of memory / Docker build failed with exit code 137

Neden: Kapsayıcı veya Docker derleme işlemi sırasında sistem kaynakları (özellikle RAM) tükeniyor. Exit code 137, genellikle bir sürecin işletim sistemi tarafından “Out of Memory Killer” (OOM Killer) tarafından sonlandırıldığını gösterir.

  • Çözüm:
    • Docker’a daha fazla bellek ayırın: Docker Desktop kullanıyorsanız, ayarlar menüsünden Docker Engine’e ayrılan bellek miktarını artırın.
    • Kapsayıcı için bellek sınırlarını artırın: docker run -m <bellek_miktarı> <image> komutu ile kapsayıcıya daha fazla bellek tahsis edin (örneğin, -m 2g).
    • Uygulamanızın bellek tüketimini optimize edin: Uygulama kodunuzda bellek sızıntıları olup olmadığını kontrol edin veya daha verimli algoritmalar kullanın.
    • Derleme sırasında büyük dosyaları önbelleğe almayı veya daha küçük baz imajları kullanmayı düşünün. Multi-stage builds (çok aşamalı derlemeler) bu konuda oldukça etkilidir.

Kubernetes Hataları ve Çözüm Stratejileri

Kubernetes, kapsayıcılı uygulamaları otomatik olarak dağıtmak, ölçeklendirmek ve yönetmek için tasarlanmış güçlü bir orkestrasyon platformudur. Kubernetes’in karmaşık yapısı, Pod zamanlama, ağ iletişimi veya kaynak yönetimi gibi çeşitli hata senaryolarına yol açabilir. Bu bölümde, en sık karşılaşılan Kubernetes hatalarını ve bunların üstesinden gelmek için kullanılabilecek stratejileri ele alacağız.

1. ImagePullBackOff / ErrImagePull

Neden: Kubernetes, Pod’un çalıştırması gereken kapsayıcı imajını çekemiyor. Bu, yanlış imaj adı, yanlış etiket, kayıt defteri kimlik doğrulama sorunları, ağ sorunları veya kayıt defterinin erişilemez olması gibi çeşitli nedenlerden kaynaklanabilir.

  • Çözüm:
    • İmaj adını ve etiketini kontrol edin: kubectl describe pod <pod_adı> komutunun çıktısındaki “Events” bölümünü inceleyin. Genellikle burada hatanın nedeni açıkça belirtilir.
    • Kayıt defteri erişimini doğrulayın: Özel bir kayıt defteri kullanıyorsanız, Pod tanımınızda imagePullSecrets‘ın doğru yapılandırıldığından ve geçerli kimlik bilgilerini içerdiğinden emin olun.
    • Ağ bağlantısını kontrol edin: Kubernetes düğümlerinin kayıt defterine erişip erişemediğini doğrulayın. Bir düğümden curl <registry_url> komutu ile test yapabilirsiniz.
    • İmajın varlığını doğrulayın: Kayıt defterinde imajın belirtilen ad ve etiketle gerçekten mevcut olduğundan emin olun.

2. CrashLoopBackOff

Neden: Pod içindeki bir kapsayıcı sürekli olarak başlıyor, kısa bir süre çalışıyor ve ardından çöküyor. Bu genellikle uygulama içindeki bir hata, yanlış yapılandırma, eksik bağımlılıklar, kaynak yetersizliği veya sağlık kontrolü (liveness probe) başarısızlığı gibi nedenlerden kaynaklanır.

  • Çözüm:
    • Pod loglarını kontrol edin: kubectl logs <pod_adı> komutu ile mevcut logları, kubectl logs --previous <pod_adı> komutu ile de önceki çalıştırmanın loglarını inceleyin. Bu genellikle sorunun kök nedenini ortaya çıkarır.
    • Pod olaylarını inceleyin: kubectl describe pod <pod_adı> komutunun “Events” bölümü, kapsayıcının neden çöktüğüne dair ipuçları verebilir (örneğin, OOMKilled).
    • Uygulama kodunu ve yapılandırmasını kontrol edin: Ortam değişkenleri, mount edilen birimler, başlangıç komutları veya uygulama içi yapılandırma dosyaları hatalı olabilir.
    • Kaynak isteklerini ve limitlerini gözden geçirin: Pod’a yeterli CPU ve bellek ayrıldığından emin olun. Yetersiz kaynaklar, uygulamanın çökmesine neden olabilir.
    • Liveness ve Readiness Problarını gözden geçirin: Probların doğru yapılandırıldığından ve uygulamanın durumunu doğru yansıttığından emin olun.

3. Pending (Pod Durumu)

Neden: Pod, bir düğüme atanmayı bekliyor ve başlatılamıyor. Bu durum genellikle kümede uygun kaynak olmaması (CPU, bellek), düğüm seçici kısıtlamaları (nodeSelector, affinity), taints ve tolerations veya persistent volume sorunlarından kaynaklanır.

  • Çözüm:
    • Pod olaylarını inceleyin: kubectl describe pod <pod_adı> komutunun “Events” bölümü, Pod’un neden zamanlanamadığına dair bilgiler içerir (örneğin, “FailedScheduling” mesajı ve nedeni).
    • Küme kaynaklarını kontrol edin: kubectl get nodes ve kubectl describe node <node_adı> komutları ile düğümlerdeki boş kaynakları (CPU, bellek) kontrol edin. Yetersiz kaynak varsa yeni düğüm eklemeyi düşünün.
    • Kaynak isteklerini ve limitlerini azaltın: Pod’un istediği kaynaklar mevcut düğümlerdeki boş kaynaklardan fazlaysa, Pod zamanlanamaz. İstekleri gerçekçi seviyelere çekin.
    • NodeSelector veya tolerations’ı kontrol edin: Pod’un belirli bir düğüme atanmasını zorlayan kısıtlamaları gözden geçirin. Yanlış yapılandırma Pod’un zamanlanmasını engelleyebilir.
    • PersistentVolumeClaim durumunu kontrol edin: Eğer Pod bir PVC’ye ihtiyaç duyuyorsa, PVC’nin Bound durumda olduğundan ve ilgili PersistentVolume’un (PV) mevcut olduğundan emin olun.

4. OOMKilled (Out of Memory Killed)

Neden: Pod içindeki bir kapsayıcı, kendisine ayrılan bellek limitini aştığı için işletim sistemi (OOM Killer) tarafından sonlandırıldı. Bu, genellikle uygulama içinde bir bellek sızıntısı veya yetersiz bellek limitleri nedeniyle olur. Kubernetes, Pod’u yeniden başlatmaya çalışır, bu da CrashLoopBackOff durumuna yol açabilir.

  • Çözüm:
    • Pod loglarını ve olaylarını inceleyin: kubectl logs <pod_adı> ve kubectl describe pod <pod_adı> komutları ile bellek tüketiminin ne zaman arttığını ve OOMKilled olayını gözlemleyin.
    • Uygulamanın bellek tüketimini analiz edin: Uygulamanızın gerçek bellek ihtiyacını belirlemek için performans izleme araçları kullanın.
    • Bellek limitlerini artırın: Pod tanımındaki resources.limits.memory değerini artırın. Ancak bu sadece geçici bir çözüm olabilir; asıl sorun uygulamadaki bellek sızıntısı veya verimsiz bellek kullanımı olabilir.
    • Uygulamanızı optimize edin: Bellek tüketimini azaltacak kod optimizasyonları yapın veya daha az bellek tüketen alternatif kütüphaneler/çerçeveler kullanın.

5. Evicted (Pod Durumu)

Neden: Düğümdeki kaynak yetersizliği (disk alanı, bellek) veya düğümün sağlıksız durumu (örneğin, ağ bağlantısı sorunları) nedeniyle Kubernetes tarafından bir Pod düğümden çıkarıldı. Kubernetes, kümenin kararlılığını sağlamak için bu tür Pod’ları tahliye eder.

  • Çözüm:
    • Düğüm kaynaklarını kontrol edin: kubectl describe node <node_adı> komutu ile disk alanı, bellek ve diğer kaynak kullanımını inceleyin. Özellikle Allocatable ve Capacity değerlerine bakın.
    • Gereksiz Pod’ları kaldırın: Düğümdeki diğer Pod’ların kaynak tüketimini azaltın veya bunları başka düğümlere taşıyın.
    • Düğümün sağlığını iyileştirin: Düğümdeki gereksiz dosyaları temizleyin, disk alanını genişletin veya düğümdeki sistem kaynaklarını artırın.
    • Pod’ların kaynak isteklerini ve limitlerini gözden geçirin: Aşırı kaynak talep eden Pod’ları optimize edin veya daha gerçekçi sınırlar belirleyin.
    • Kubelet yapılandırmasını kontrol edin: Kubelet’in tahliye eşiklerini (eviction thresholds) gözden geçirin.

Genel Sorun Giderme Stratejileri

Hem Docker hem de Kubernetes ortamlarında sorun giderme süreçlerini hızlandıracak evrensel yaklaşımlar mevcuttur. Bu stratejiler, hangi teknolojiyi kullanıyor olursanız olun, sorunların kök nedenini bulmanıza yardımcı olacaktır.

  • Logları İnceleyin: En önemli ilk adımdır. Uygulamanın ne yaptığını, nerede takıldığını veya neden çöktüğünü anlamanın birincil yoludur.
    • Docker için: docker logs <container_id_or_name>
    • Kubernetes için: kubectl logs <pod_name>, önceki çalıştırmanın logları için kubectl logs --previous <pod_name>
  • Olayları Kontrol Edin: Kubernetes’te kubectl describe <resource_type> <resource_name> komutu (özellikle Pod’lar için) “Events” bölümünde değerli bilgiler sunar. Bu olaylar, bir Pod’un neden zamanlanamadığı, çekilemediği veya sonlandırıldığı gibi bilgileri içerir.
  • Kaynak Kullanımını İzleyin: CPU, bellek, disk ve ağ kullanımını düzenli olarak takip edin. Kaynak darboğazları birçok hatanın temel nedeni olabilir.
    • Docker için: docker stats
    • Kubernetes için: kubectl top pods, kubectl top nodes (Metrics Server’ın kurulu olması gerekir)
  • Yapılandırmayı Doğrulayın: YAML dosyalarınızın veya Dockerfile’larınızın sözdizimsel olarak ve mantıksal olarak doğru olduğundan emin olun. Küçük bir yazım hatası bile büyük sorunlara yol açabilir.
  • Ağ Bağlantısını Test Edin: Kapsayıcılar veya Pod’lar arası iletişimi, dış ağ bağlantısını kontrol edin (ping, telnet, curl gibi temel ağ araçlarıyla). DNS çözümleme sorunları da yaygın bir hatadır.
  • Versiyon Uyumluluğunu Kontrol Edin: Docker motoru, Kubernetes sürümü, kubelet, kube-proxy ve uygulamalarınızın bağımlılıkları arasında uyumsuzluklar sorunlara yol açabilir. Her zaman resmi dokümantasyonu kontrol edin.
  • Topluluk Kaynaklarından Yararlanın: Stack Overflow, Kubernetes GitHub sorunları, Docker forumları ve diğer çevrimiçi topluluklar, benzer sorunlarla karşılaşmış diğer kullanıcıların deneyimlerini ve çözümlerini barındırır.

Proaktif Önlemler ve En İyi Uygulamalar

Hataları oluşmadan önce önlemek, kesintisiz ve verimli bir operasyon için kritik öneme sahiptir. Aşağıdaki en iyi uygulamalar, kapsayıcı ortamlarınızın daha sağlam olmasını sağlayacaktır:

  • Sağlık Kontrolleri (Health Checks) Uygulayın: Kubernetes’te livenessProbe ve readinessProbe kullanarak uygulamalarınızın sağlıklı olup olmadığını düzenli olarak kontrol edin ve sağlıksız Pod’ları otomatik olarak yeniden başlatın veya trafikten çıkarın. Bu, uygulama çöküşlerinin etkisini azaltır.
  • Kaynak İstekleri ve Limitleri Tanımlayın: Pod’larınız için CPU ve bellek requests (istekler) ve limits (limitler) belirleyerek kaynak çekişmesini önleyin ve OOMKilled durumlarını azaltın. Doğru kaynak yönetimi, küme kararlılığı için hayati öneme sahiptir.
  • Küçük ve Optimize Edilmiş İmajlar Kullanın: Küçük imajlar, güvenlik açıklarını azaltır, çekme sürelerini kısaltır ve disk alanından tasarruf sağlar. Çok aşamalı derlemeler (multi-stage builds) bu konuda oldukça etkilidir.
  • Merkezi Loglama ve İzleme Sistemleri: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana) gibi araçlarla logları ve metrikleri merkezi olarak toplayarak sorunları daha hızlı tespit edin ve proaktif olarak müdahale edin.
  • CI/CD Boru Hatlarını Otomatize Edin: Test edilmiş ve güvenilir imajların dağıtımını sağlayarak insan hatasını minimize edin ve dağıtım süreçlerini hızlandırın. Otomatik testler, hataları üretim ortamına ulaşmadan yakalar.
  • Güvenlik En İyi Uygulamalarını Takip Edin: Kapsayıcıları root olmayan kullanıcılarla çalıştırın, imajları düzenli olarak güvenlik açıkları için tarayın ve güncel tutun. Minimum ayrıcalık ilkesini uygulayın.
  • Düzenli Güncellemeler ve Yama Yönetimi: Docker ve Kubernetes bileşenlerini en son kararlı sürümlerde tutmak, bilinen hatalardan ve güvenlik açıklarından korunmanıza yardımcı olur. Yama ve yükseltme planlarınız olsun.

Sonuç

Docker ve Kubernetes, modern altyapıların vazgeçilmez bileşenleridir ve sağladıkları esneklik ve verimlilikle iş süreçlerini dönüştürmektedirler. Ancak, bu güçlü araçların potansiyelini tam olarak kullanmak, karşılaşılan hata kodlarını anlamayı ve etkili çözüm stratejileri geliştirmeyi gerektirir. Bu rehberde ele alınan yaygın hatalar ve çözüm yöntemleri, sorun giderme yeteneklerinizi güçlendirecek ve daha sağlam, güvenilir kapsayıcı tabanlı sistemler oluşturmanıza yardımcı olacaktır. Unutmayın, her hata bir öğrenme fırsatıdır ve sürekli pratik yaparak ve bilgi birikiminizi artırarak, konteyner teknolojileri dünyasında uzmanlaşabilirsiniz. Kapsayıcı ortamlarınızda karşılaştığınız zorluklar ne olursa olsun, doğru araçlar ve metodolojilerle her zaman bir çözüm bulabilirsiniz.

Bu yazıya tepkin ne?

Yorum Ekle

İLGİNİZİ ÇEKEBİLİR
Zihin Kontrolü Gerçekleşiyor: Geleceği Şekillendirecek 5 Beyin-Bilgisayar Arayüzü Uygulaması
28 Mart 2026

Zihin Kontrolü Gerçekleşiyor: Geleceği Şekillendirecek 5 Beyin-Bilgisayar Arayüzü Uygulaması

Docker ve Kubernetes Hataları: Kapsayıcı Teknolojilerde Sık Karşılaşılan Sorunlar ve Etkili Çözüm Stratejileri

Bu Yazıyı Paylaş