🩺 Yaygın Hatalar
Yaygın Hatalar: Docker hata mesajları araba göstergesi gibidir: 'port is already allocated' motorun patlaması değil, tek bir alt sisteme işaret eden belirli bir uyarı ışığıdır —
Docker hata mesajları araba göstergesi gibidir: 'port is already allocated' motorun patlaması değil, tek bir alt sisteme işaret eden belirli bir uyarı ışığıdır — bu sekme de her ışığı kendi sigorta kutusuyla eşleştiren kılavuzdur. Peki her hatayı çıktıkça google'lamak varken kalıpları neden ezbere tanıyasın? Çünkü kırık bir CI pipeline'ında saat farklı işler: 'Cannot connect to the Docker daemon' mesajını 10 saniyede 'servis çalışmıyor' diye teşhis etmekle 30 dakika deneme-yanılma arasındaki fark, sürüm notunda bir dipnot ile bloklanmış bir release arasındaki farktır — tıpkı deneyimli bir Java geliştiricisinin NullPointerException ile ClassNotFoundException'ı odanın öbür ucundan ayırt etmesi gibi; ikisi bambaşka katmanlara işaret eder. Aşağıdaki her hata gerçektir, gerçek QA pipeline'larından derlenmiştir; şekillerini şimdi, hiçbir şey yanmıyorken öğren.
🎬 Bir Docker Hatasının Teşhis Zinciri: "Anında Kapanan Container"
nginx daemonize oluyor
Container ayakta kalıyor
`docker run my-image` çalıştırılır — container BAŞLAR ve bir saniyeden az sürede DURUR. Exit code 0, yani "hata" bile vermedi; sadece kayboldu.
Adım 1 — mesajı PARÇALA: exit code 0 bir HATA değil, "process düzgün bitti" demek. Sorun crash DEĞİL — sorun, sürecin hiç YAŞAMAMASI.
Adım 2 — değiştirmeyen kanıt topla: `docker logs my-container`. Çıktıda nginx'in normal başlangıç mesajları var — hata YOK, sadece process erken bitmiş.
Adım 3 — KÖK nedeni teşhis et: `CMD ["nginx"]` çalıştırıldığında nginx kendini bir ARKA PLAN DAEMON'ına dönüştürür ve CMD'nin başlattığı süreç hemen biter — Docker "ana süreç bitti" der ve container'ı kapatır.
Adım 4 — en küçük GÜVENLİ düzeltme: `CMD ["nginx", "-g", "daemon off;"]` — nginx'i ÖN PLANDA çalıştırır. Docker izleyeceği süreci artık kaybetmez.
Adım 5 — AYNI komutla kanıtla: `docker run my-image` tekrar çalıştırılır. `docker ps` artık container'ı "Up" olarak gösterir — sonsuza dek değil, ana process yaşadığı sürece.
Final — zincir: mesajı parçala → değiştirmeyen kanıt (logs) → kök neden → en küçük güvenli düzeltme → aynı komutla kanıtla. Java köprüsü: bu, `main()` metodunun daha ilk satırda return etmesine benzer — thread hiç canlı kalmadı, exception fırlatmadı.
Adım Adım: Docker Hata Teşhis Refleksi
`docker ps -a` çalıştırılır; 0 temiz çıkış, 1+ hata anlamına gelir — ama "hangi hata" sorusunun cevabı burada değildir.
Değiştirmeyen kanıt topla