K02 — Çözüm#
Önce kendin dene. Aşağıda önce teşhis akışı, sonra kök sebep.
Teşhis akışı (üç komutla daralt)#
-
Container çalışıyor mu, çöküyor mu?
Upgörüyorsun — uygulama çökmüyor. Demek sorun app'in çalışmasında değil, ona ulaşmakta. -
App hangi portu dinliyor?
Uygulama container içinde 5000'i dinliyor. -
Eşleme neyi neye bağlıyor?
Host 8080 → container 80. Ama app 80'i değil 5000'i dinliyor. Container'ın 80 portunda dinleyen yok →curl :8080boş yanıt alıyor.
Bu üç komut belirtiyi (bağlanılamıyor) kök sebebe (yanlış port eşlemesi) kanıtla bağladı.
Kök sebep#
ports: "8080:80" eşlemesinin container tarafı (80) uygulamanın gerçek portu (5000) ile uyuşmuyor. Docker paketi 8080'den container'ın 80'ine yönlendiriyor, orada dinleyen olmadığı için bağlantı boşa düşüyor.
Düzeltme#
Belirtinin gittiğini kanıtla#
Niye böyle oluyor#
"HOST:CONTAINER" eşlemesinde sol taraf makinende açılan port, sağ taraf container içinde trafiğin gittiği port. Sağ taraf uygulamanın listen ettiği portla aynı olmalı. Bu, yeni başlayanın en sık takıldığı container hatasıdır: container "Up" olduğu için "çalışıyor" sanılır, oysa erişim yolu kopuktur.
Ders#
"Container Up" ile "uygulama erişilebilir" iki ayrı iddiadır; her birini ayrı bir komutla kanıtla. ps (ayakta mı) → logs (hangi port) → eşleme (doğru mu) üçlüsü port sorunlarını dakikada daraltır.