Debian 13'te Docker Konteynerlerini Hata Ayıklama Yöntemleri
Giriş
Bu eğitimde, pratik ve yeni başlayanlara uygun teknikler kullanarak Docker konteynerlerini nasıl hata ayıklayacağınızı öğreneceksiniz. Konteyner durumunu kontrol ederek, günlükleri analiz ederek, yapılandırmayı inceleyerek ve konteyner ortamına erişerek sorunları tanımlarsınız. Bu yaklaşım, bir konteynerin neden başarısız olduğunu ve nasıl düzeltileceğini hızlı bir şekilde anlamanıza yardımcı olur.
Son hedef: Bu eğitimin sonunda, günlükler, inceleme ve çalışma zamanı analiz araçlarını kullanarak yaygın Docker konteyner sorunlarını tanımlayıp çözebileceksiniz.
Ön Koşullar
- Hedef kitle: Yeni başlayan sistem yöneticileri
- Tahmini süre: ~30 dakika
- İşletim sistemi: Debian 13
- Yazılım: Docker 24.0 veya daha yeni
- İzinler: Sudo ayrıcalıklarına sahip kullanıcı veya docker grubuna üyelik
- Donanım gereksinimleri: En az 2 GB RAM ve 10 GB boş disk alanı
- Ağ gereksinimleri: Görüntüleri çekmek için internet erişimi, bu eğitim için belirli bir port gerekmiyor
- Gereksinimler: Temel komut satırı kullanımı ve çalışan bir Docker hizmeti
- Uyumluluk: Debian 13 üzerinde test edilmiştir ve Debian 12 ve Ubuntu 22.04 üzerinde çalışır
Adım 1: Docker Sistem Bilgilerini Kontrol Et
Belirli bir konteyneri hata ayıklamadan önce, Docker'ın kendisinin doğru çalıştığını doğrulayın.
Aşağıdaki komutu çalıştırın:
docker system info
Docker ortamı hakkında ayrıntılı bilgiler görürsünüz, bunlar arasında:
- Sunucu sürümü
- Depolama sürücüsü
- Konteyner ve görüntü sayısı
- CPU ve bellek kullanılabilirliği
- Docker kök dizini
Bu, şunları doğrulamanıza yardımcı olur:
- Docker'ın doğru çalıştığı
- Sistemin yeterli kaynaklara sahip olduğu
- Küresel yapılandırma sorunlarının olmadığı
Docker çalışmıyorsa, "Docker daemon'a bağlanılamıyor" gibi bir hata görebilirsiniz.
Docker hizmet durumunu kontrol etmek için:
systemctl status docker
Docker hizmetinin aktif olup olmadığını görürsünüz. Çalışmıyorsa, başlatın:
sudo systemctl start docker
Artık hizmetin aktif durumda olduğunu görmelisiniz.
Konteynerleri hata ayıklamadan önce her zaman Docker sağlığını doğrulayın. Birçok konteyner sorunu, Docker hizmeti veya sistem düzeyindeki sorunlardan kaynaklanır.
Adım 2: Konteyner Durumunu Kontrol Et
Aşağıdaki komutu çalıştırın:
docker ps
Konteyner kimliği, görüntü ve durum gibi ayrıntılarla çalışan konteynerlerin bir listesini görürsünüz. Konteyneriniz "Up" durumu ile görünüyorsa, şu anda çalışıyor demektir.
Durdurulmuş konteynerleri dahil etmek için:
docker ps -a
Artık tüm konteynerleri görürsünüz. Konteyneriniz "Exited" olarak görünüyorsa, bir hata nedeniyle durduğunu veya yürütmenin tamamlandığını gösterir.
Bir konteyner, ana süreci çıktığında durur. Bu normal bir davranıştır ancak beklenmedik bir şekilde çıkarsa genellikle bir sorunu gösterir.
Adım 3: Konteyner Günlüklerini Görüntüle
Günlükler, konteyner içindeki uygulamanın çıktısını gösterir. Bu, hata ayıklama için en önemli adımdır. <CONTAINER_ID> değerini adım 2'de açıklanan docker ps komutu ile alabilirsiniz.
Çalıştırın:
docker logs <CONTAINER_ID>
Hatalar ve uyarılar dahil olmak üzere uygulama çıktısını görürsünüz. Eksik dosyalar veya bağlantı hataları gibi başarısızlıkları gösteren mesajlara bakın.
Günlükleri gerçek zamanlı olarak takip etmek için:
docker logs -f <CONTAINER_ID>
Yeni günlük girdilerini görürsünüz. Bu, bir konteyneri yeniden başlatırken ve davranışını gözlemlerken kullanışlıdır.
Sadece son günlükleri görmek için:
docker logs --tail 50 <CONTAINER_ID>
Son 50 satır çıktıyı görürsünüz. Bu, en son olaylara odaklanmanıza yardımcı olur.
Önce son günlüklerle başlayın, gerekirse tam günlükleri inceleyin.
Adım 4: Konteyner Durumunu İnceleyin
Docker, her konteyner hakkında ayrıntılı bilgi depolar.
Çalıştırın:
docker inspect <CONTAINER_ID>
Yapılandırma ve çalışma zamanı ayrıntıları ile yapılandırılmış bir JSON çıktısı görürsünüz.
Konteyner durumunu kontrol etmek için:
docker inspect -f '{{.State.Status}}' <CONTAINER_ID>
"running" veya "exited" gibi basit bir değer görürsünüz, bu da konteyner durumunu doğrular.
Çıkış kodunu kontrol etmek için:
docker inspect -f '{{.State.ExitCode}}' <CONTAINER_ID>
Bir sayı görürsünüz. 0 değeri başarıyı, sıfır olmayan herhangi bir değer ise bir hatayı gösterir.
Yeniden başlatma politikasını kontrol etmek için:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <CONTAINER_ID>
Konteynerin otomatik olarak yeniden başlatılacak şekilde yapılandırılıp yapılandırılmadığını görürsünüz.
Çıkış kodları, bir konteynerin neden durduğunu anlamanıza yardımcı olur. Bir konteyner çıktığında, içindeki ana süreç sisteme sayısal bir kod döndürür.
Görmeniz muhtemel yaygın çıkış kodları:
0– Süreç hatasız bir şekilde başarıyla tamamlandı. Bu genellikle konteynerin normal bir şekilde durduğu anlamına gelir. Örneğin, bir betik görevini tamamladı ve çıktı.1– Genel bir hata oluştu. Bu, en yaygın başarısızlık kodudur ve genellikle uygulama içinde bir şeyin başarısız olduğu anlamına gelir, örneğin eksik bir dosya, geçersiz yapılandırma veya çalışma zamanı hatası.125– Docker konteyneri çalıştıramadı. Bu genellikle docker run komutunun kendisiyle ilgili bir sorunu, örneğin geçersiz seçenekler veya yanlış parametreler olduğunu gösterir.126– Konteyner içindeki komut çalıştırılamıyor. Bu genellikle izin sorunları veya dosyanın çalıştırılabilir olmadığını gösterir.127– Komut bulunamadı. Bu genellikle belirtilen ikili dosya veya betiğin konteyner içinde bulunmadığı anlamına gelir.137– Konteyner zorla durduruldu. Bu genellikle sistemin bellekten çıkması ve konteyner sürecini öldürmesi durumunda olur.139– Konteyner bir segmentasyon hatası ile çöktü. Bu, genellikle bellek erişim sorunlarıyla ilgili ciddi bir uygulama hatasını gösterir.143– Konteyner düzgün bir şekilde durduruldu. Bu genellikle docker stop komutunu çalıştırdığınızda ve konteynerin doğru bir şekilde kapandığında olur.
Öncelikle 1, 127 ve 137 kodlarına odaklanın, çünkü bunlar hata ayıklama sırasında en yaygın olanlardır. Hatanın kesin nedenini anlamak için her zaman çıkış kodunu docker logs ile birleştirin.
Adım 5: Konteyner Ortamına Erişin
Bazen günlükler yeterli değildir. Konteyneri doğrudan incelemek için içine girebilirsiniz.
Çalıştırın:
docker exec -it <CONTAINER_ID> /bin/bash
Konteyner içinde etkileşimli bir kabuğa girersiniz.
Eğer bash mevcut değilse:
docker exec -it <CONTAINER_ID> /bin/sh
Artık konteyneri keşfedebilirsiniz.
Ev sahibi sistemden çalışan konteyner süreçlerini kontrol edin:
docker top <CONTAINER_ID>
Konteyner içindeki aktif süreçleri görürsünüz. Ana süreç eksikse, konteyner durabilir.
Yapılandırma dosyalarını doğrulayın ve komutları konteyner içinde manuel olarak test edin.
Adım 6: Kaynak Kullanımını İzleyin
Konteynerler sınırlı kaynaklar nedeniyle başarısız olabilir.
Çalıştırın:
docker stats
Tüm konteynerler için gerçek zamanlı CPU, bellek ve ağ kullanımı görürsünüz.
Belirli bir konteyneri izlemek için:
docker stats <CONTAINER_ID>
Tüm çalışan konteynerler için kaynak kullanımı ile sürekli güncellenen canlı bir tablo görürsünüz. Her satır bir konteyneri temsil eder ve her sütun belirli bir tür kaynak kullanımını gösterir.
En önemli sütunlar şunlardır:
- CPU % – Konteynerin ne kadar CPU kullandığını gösterir. Yüksek değerler yoğun işlem veya verimsiz kodu gösterebilir.
- MEM USAGE / LIMIT – Konteynerin ne kadar bellek kullandığını ve sınırına kıyasla gösterir. Kullanım sınırına yakınsa, konteyner yavaşlayabilir veya durdurulabilir.
- MEM % – Sınıra göre kullanılan bellek yüzdesi.
- NET I/O – Ağ trafiği. Bu, konteynerin ne kadar veri aldığını ve gönderdiğini gösterir. Yüksek değerler yoğun ağ etkinliğini gösterebilir.
- BLOCK I/O – Disk okuma ve yazma etkinliği. Bu sütun, konteynerin diske ne kadar veri okuduğunu ve yazdığını gösterir.
- PIDs – Konteyner içinde çalışan süreç sayısı. Çok yüksek bir sayı, bir süreç sızıntısını veya kontrolden çıkmış bir uygulamayı gösterebilir.
Eğer BLOCK I/O sürekli artıyorsa, konteyner aktif olarak depolama kullanıyor demektir. Bu, veritabanları için normaldir, ancak beklenmedik artışlar verimsiz disk kullanımı veya aşırı günlük kaydı gösterebilir. Hata ayıklarken, CPU, bellek veya BLOCK I/O'daki olağandışı artışlara dikkat edin. Konteynerin o anda ne yaptığını anlamak için bu bilgiyi docker logs ile birleştirin.
Adım 7: Docker Olaylarını Kontrol Et
Docker, sistem ve konteyner düzeyinde neler olduğunu açıklayan olayları kaydeder. Bu olaylar, bir konteynerin ne zaman başladığını, durduğunu, çöktüğünü veya yeniden başladığını anlamanıza yardımcı olur.
Aşağıdaki komutu çalıştırın:
docker events
Konteyner başlatma, durdurma ve yeniden başlatma gibi olayların canlı bir akışını görürsünüz. Çıktı gerçek zamanlı olarak sürekli güncellenir.
Canlı akışı durdurmak için Ctrl + C tuşlarına basın.
Belirli Bir Konteyner İçin Olayları Filtrele
Çalıştırın:
docker events --filter container=<CONTAINER_ID>
Seçilen konteynerle ilgili yalnızca olayları görürsünüz. Bu, tek bir iş yüküne odaklanmanıza yardımcı olur.
Belirli Bir Zaman Aralığından Olayları Göster
Belirli bir zaman noktasından itibaren olayları görmek için:
docker events --since 10m
Son 10 dakikadaki olayları görürsünüz.
Hem başlangıç hem de bitiş zamanını tanımlamak için:
docker events --since 2026-01-01T10:00:00 --until 2026-01-01T11:00:00
Bu zaman aralığında meydana gelen olayları görürsünüz.
10m, 1h gibi göreceli zaman veya tam zaman damgalarını kullanabilirsiniz.
Olay Çıktısını Biçimlendir
Çalıştırın:
docker events --format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.ID}}'
Seçilen alanlarla biçimlendirilmiş bir çıktı görürsünüz. Bu, okunmasını veya betiklerle entegrasyonunu kolaylaştırır.
Hata ayıklama sırasında yalnızca ihtiyacınız olan bilgileri vurgulamak için biçimlendirmeyi kullanın.
Belirli Olay Türlerini Filtrele
Belirli sorunlara odaklanmak için olayları filtreleyebilirsiniz.
Konteyner Durur veya Çöker
Çalıştırın:
docker events --filter event=die
Konteynerler durduğunda olayları görürsünüz. Bu, beklenmedik kapanmaları belirlemeye yardımcı olur.
Bellek Yetersiz Olayları
Çalıştırın:
docker events --filter event=oom
Bir konteyner bellek sınırları nedeniyle öldürüldüğünde olayları görürsünüz. Bu, kaynak sorunlarını teşhis etmek için kritiktir.
OOM, Bellek Yetersiz anlamına gelir. Sistem, mevcut belleği aştığında konteyneri durdurur.
Konteyner Yeniden Başlatılır
Çalıştırın:
docker events --filter event=restart
Konteynerlerin yeniden başlatıldığını görürsünüz. Sık yeniden başlatma olayları bir çökme döngüsünü gösterebilir.
Filtreleri ve Zaman Aralığını Birleştir
Çalıştırın:
docker events --since 10m --filter event=die
Son 10 dakikadaki konteyner durma olaylarını görürsünüz. Bu, son hataları daraltmaya yardımcı olur.
Tekrarlanan çökmeler veya bellek sorunları gibi kalıpları hızlıca belirlemek için filtreleri ve zaman aralıklarını birleştirin.
Adım 8: Disk Kullanımını Kontrol Et ve Kullanılmayan Görüntüleri Temizle
Docker, disk üzerinde görüntüler, konteynerler, hacimler ve önbellek depolar. Zamanla, kullanılmayan veriler önemli miktarda alan tüketebilir ve sorunlara neden olabilir.
Aşağıdaki komutu çalıştırın:
docker system df
Disk kullanımı özeti görürsünüz, bunlar arasında:
- Görüntüler
- Konteynerler
- Yerel hacimler
- Yapı önbelleği
Her bölüm şunları gösterir:
- Toplam sayım
- Aktif öğeler
- Boyut
- Geri kazanılabilir alan
Bu, Docker'ın ne kadar disk alanı kullandığını ve ne kadarının temizlenebileceğini anlamanıza yardımcı olur.
"Geri kazanılabilir" sütunu, kullanılmayan kaynakları kaldırarak ne kadar alanın serbest bırakılabileceğini gösterir.
Kullanılmayan görüntüleri görmek için çalıştırın:
docker images -f dangling=true
Hiçbir etiketlenmemiş ve hiçbir konteyner tarafından kullanılmayan görüntüleri görürsünüz. Bunlar kaldırmak için güvenli adaylardır.
Kullanılmayan görüntüleri kaldırmak için çalıştırın:
docker image prune
Onaylamanız istenir. Onaydan sonra, kullanılmayan görüntüler silinir ve disk alanı serbest bırakılır.
Sadece sarkan olanlar değil, tüm kullanılmayan görüntüleri kaldırmak için:
docker image prune -a
Hiçbir konteyner tarafından kullanılmayan tüm görüntüleri kaldırırsınız.
Önemli: Bu komut, daha sonra ihtiyaç duyulabilecek görüntüleri kaldırır. Hiçbir gerekli konteynerin onlara bağlı olmadığından emin olun.
Düzenli temizlik, konteynerlerin başarısız olmasına veya öngörülemeyen davranışlar sergilemesine neden olabilecek disk alanı sorunlarını önlemeye yardımcı olur.
Doğrulama ve Test
docker psçalıştırın ve konteyner durumunun doğru olduğunu doğrulayın.docker logsçalıştırın ve hataların tanımlandığını veya çözüldüğünü doğrulayın.docker inspectçalıştırın ve durum ve çıkış kodunun beklentilere uygun olduğunu doğrulayın.docker execkullanarak konteyner içinde süreçlerin çalıştığını doğrulayın.- Eğer hata ayıklama başarılıysa, konteyner günlüklerde kritik hatalar olmadan çalışır durumda kalmalıdır.
Değişiklikleri Geri Alma
Hata ayıklama sırasında değişiklik yaptıysanız, temiz bir durumu geri yükleyebilirsiniz.
Konteynerleri kaldırmadan önce önemli verileri yedekleyin.
Bir konteyneri durdurun:
docker stop <CONTAINER_ID>
Konteynerin durdurulduğuna dair onay görürsünüz.
Bir konteyneri kaldırın:
docker rm <CONTAINER_ID>
Konteynerin kaldırıldığına dair onay görürsünüz.
Konteyneri yeniden oluşturun:
docker run <OPTIONS> <IMAGE_NAME>
Görüntüden yeni bir konteyner oluşturulur.
Önemli: Bir konteyneri kaldırmak, çalışma zamanını siler. Veriler, hacimlerde saklanmadıkça kaybolur.
Hata Ayıklama
Konteyner hemen çıkıyor
Hata mesajları için docker logs kontrol edin. Genellikle sorunu açıklarlar.
Konteynere erişilemiyor
docker ps kullanarak çalıştığından emin olun.
Günlükler mevcut değil
Uygulamanın çıktıyı stdout veya stderr'e yazdığından emin olun.
Konteyner sürekli yeniden başlıyor
Yeniden başlatma politikasını ve günlükleri kontrol ederek çökme döngülerini belirleyin.
Yüksek kaynak kullanımı
CPU veya bellek artışlarını doğrulamak için docker stats kullanın.
Sonuç
Konteynerlerin durumunu kontrol ederek, günlükleri analiz ederek, yapılandırmayı inceleyerek ve konteyner ortamına erişerek Docker konteynerlerini nasıl hata ayıklayacağınızı öğrendiniz. Bu teknikler, yaygın sorunları hızlı bir şekilde tanımlayıp çözmenizi sağlar. Bir sonraki adım olarak, birden fazla konteyneri yönetmek için Docker Compose hata ayıklama ve merkezi günlük sistemlerini keşfedin.