---
name: docker-diagnosis
description: Dockerfile, image, container ve compose sorunlarını teşhis etme — boyut, layer cache, runtime crash, healthcheck, network, mount.
---

# Docker Diagnosis

## Ortak Doktrin

`agents/shared/severity-rubric.md` ve `agents/shared/escalation-matrix.md` default-load
sayılır (`agents/coordination.md` §11). Bu skill'in çıktısı **Critical / High / Medium /
Low + kanıt** formatında olmak zorunda — spekülatif Critical yasak. Sahiplik dışı bulgu
ilgili agent'a delege; karar yetkisi eşiği aşılırsa **kullanıcı onayı zorunlu**.

## Ne Zaman Kullanılır
- Image çok büyük / build yavaş
- Container exit kodu non-zero
- Healthcheck fail
- Compose'da servis erişilemiyor
- Hot reload çalışmıyor (dev)

## Workflow
1. **Tanı topla** (read-only)
   - `docker images`, `docker history <img>`, `dive <img>` (varsa)
   - `docker ps -a`, `docker logs <id> --tail=200`
   - `docker inspect <id>` -> exit code, OOMKilled, restart count
   - Compose: `docker compose config`, `docker compose ps`, `docker compose logs <svc>`
2. **Hipotez kur**
   - Build yavaş -> `.dockerignore` eksik veya cache invalidation
   - Boyut büyük -> tek-stage, dev deps prod'a sızdı, apt cache temizlenmedi
   - Exit 137 -> OOM (mem limit veya host)
   - Exit 1/2 + log boş -> entrypoint yanlış, PID 1 sinyal yutuyor
   - Compose connect refused -> dependency healthy bekleme yok / network adı
3. **Aksiyon öner**
   - Dockerfile diff
   - Compose patch
   - `docker compose up --build` doğrulama

## Checklist
- [ ] Multi-stage var mı?
- [ ] Base image pin'li ve slim/distroless?
- [ ] `.dockerignore` (`.git`, `node_modules`, `__pycache__`, `.env`, `dist`)
- [ ] Layer sırası: dep manifest -> install -> source copy
- [ ] Non-root USER
- [ ] HEALTHCHECK
- [ ] Compose `depends_on.condition: service_healthy`
- [ ] Volume mount mode `:ro` (uygun yerde)
- [ ] PID 1: `tini` veya `--init`

## Antipattern
- `FROM ubuntu:latest` (pinned değil + büyük)
- `RUN apt-get update` ayrı layer (apt-cache stale)
- `COPY . .` paket dosyalarından önce
- `ENV NODE_ENV=development` prod image'da
- `chmod 777` runtime'da
- Build arg ile secret (`ARG DB_PASS=...`)
- Container içinde `npm install` runtime'da

## Örnek Agent Davranışı
```
User: docker compose up sonrası api restart loop'ta
Agent:
1. docker compose ps -> api restarting
2. docker compose logs api --tail=100 -> "ECONNREFUSED postgres:5432"
3. compose.yml inspect -> depends_on: [postgres] (kondisyon yok)
4. Hipotez: postgres healthy olmadan api start
5. Çözüm: postgres healthcheck + depends_on.condition: service_healthy
6. Diff öner, kullanıcı uygular, smoke test
```

## Çıktı Formatı
```markdown
# Docker Diagnosis: <target>

## Symptom
## Kanıt (komut + çıktı özeti)
## Hipotez (sıralı, en olası önce)
## Çözüm (diff)
## Doğrulama
```
