Docker — E2E durumu¶
Sonraki operatör beyanlı e2202ac yeterliliği Canlı E2E Kabul sayfasındadır. Bu sayfa daha önce yazılmış lab anlatımını korur.
Durum özeti
| Kanıt | Değer |
|---|---|
| IMPLEMENTED | YES (Linux offline-image + Windows Docker betikleri ve deploy/docker/*) |
| STATIC / AUTOMATED | Linux Docker offline paket / deploy / auto-update script testleri |
| LIVE E2E VALIDATED | Linux Docker install BLOCKED / RETEST REQUIRED; Windows Docker RETEST REQUIRED |
Linux Docker — offline prebuilt image (güncel üretim modeli)¶
| Kanıt | Değer |
|---|---|
| IMPLEMENTED | YES |
| AUTOMATED TESTED | YES (docker_deploy_test.sh, package_docker_linux_test.sh, auto_update_test.sh) |
Offline paket / image / docker load / security |
LIVE PASS |
| Offline clean install | LIVE PASS |
| Reboot recovery | LIVE PASS |
| NO-OP update | LIVE PASS |
| ForceRedeploy | LIVE FAIL / RETEST REQUIRED |
| Rollback | BLOCKED (ForceRedeploy düzeltmesi sonrası) |
| Linux Docker install (HostPort fix sonrası) | LIVE PASS |
ForceRedeploy canlı hata¶
sudo bash ./scripts/update.sh --force-redeploy check/migrate/compose/live/ready/metadata geçti ama container recreate edilmedi (Running; ID ve StartedAt değişmedi).
Kök neden: aynı image + aynı Compose ile docker compose up -d no-op’tur. --force-redeploy --force-recreate kullanmalıdır.
Bu düzeltmeden sonra retest edilmeden ForceRedeploy Live PASS değildir.
Canlı install engeli (HostPort false-positive)¶
Ubuntu host’ta 4242 boştu:
systemctl is-active iqv-integration-api→ inactivess -lntp | grep ':4242 '→ socket satırı yok- Docker container yok
Kurucu yine HostPort 4242 is occupied / HostPort 4242 conflict dedi.
Kök neden: ss -ltnp dinleyici olmasa bile sütun başlığı yazabiliyor; preflight boş olmayan metni “port dolu” sandı. Gerçek port çakışması değildi.
Düzeltme: yalnızca gerçek TCP LISTEN satırı occupancy sayılır (ss -H / header filtresi). Stopped container metadata’sı canlı listener değildir.
Bu düzeltmeden sonra install retest edilmeden Live PASS işaretlenmez.
Önerilen üretim yolu:
- Offline OCI
docker savearşivi - Yalnızca harici MongoDB (operatör host/veritabanı; genel dokümanda özel lab IP yok)
- Yapılandırılan host portları (örnek
4242:4242) Ubuntu lab API host’ta - Müşteri sunucusunda Go / Git / kaynak / registry / internet yok
- API host’ta MongoDB kurulumu veya MongoDB container yok
Sonraki Ubuntu canlı test planı (operatör; burada çalıştırılmadı)¶
- Ubuntu lab API host’ta Docker Engine + Compose (paketten Docker kurulmaz).
- Offline paketi aktar (kaynak ağacı gerekmez).
install.sh+ harici URI + gerçek aktif actor ObjectID + port 4242.status.sh— External, actor=configured, live/ready, auto-update kapalı.- Reboot —
unless-stopped. - Aynı paket
update.sh→ NO-OP. - Yeni image → transactional update;
--test-fail-at AfterComposeUp→ snapshot rollback; metadata korunur; Mongo’ya dokunulmaz. - Auto-update yalnızca güvenilir LAN manifest ile isteğe bağlı; varsayılan kapalı.
Linux Docker Live E2E PASS işaretlenmeden önce bu retest tamamlanmalıdır.
Bu geliştirme / Windows lab ortamında Docker daemon ile gerçek docker build / compose up / container health / host reboot E2E yapılmadı → NOT RUN / NOT E2E VALIDATED.
E2E öncesi tooling (otomatik): açık -EnvFile / --env-file, ayrı HostPort/ContainerPort, compose ${IQV_HOST_PORT}:${HTTP_PORT}, yalnızca HostPort çakışma kontrolü. Windows PowerShell DockerDeploy testleri: otomatik PASS. Canlı install hâlâ NOT E2E VALIDATED.
Windows Docker Live E2E — Attempt #1¶
| Kanıt | Değer |
|---|---|
| Durum | LIVE E2E IN PROGRESS / RETEST REQUIRED |
| Genel PASS | NO |
Gözlenen PASS (gerçek host)¶
| Adım | Sonuç |
|---|---|
| Repository / explicit EnvFile | PASS |
| Docker availability | PASS |
| HostPort 4243 boş (native API 4242'de devam) | PASS |
| External MongoDB URI validation | PASS |
| SkipGitPull / compose seçimi / image tag | PASS |
Docker Compose config (4243→4242) |
PASS |
Container → host.docker.internal:27017 TCP |
PASS |
Detected and Fixed / Retest Required¶
| Sorun | Kök neden | Düzeltme | Retest |
|---|---|---|---|
| Docker test aşaması kesildi | PowerShell 5.1 2>&1 + Stop → BuildKit stderr = NativeCommandError |
Merkezi Invoke-IQVNativeCommand (exit-code) |
RETEST REQUIRED |
| Compose config çıktısında secret sızıntısı | Resolved config pipeline'a düştü | config --quiet + redaction |
RETEST REQUIRED |
Windows Docker Live E2E henüz PASS değildir.
Operasyon referansı: Docker kurulumu, Güncelleme ve geri alma.
Windows Docker Live E2E — Attempt #2¶
| Kanıt | Değer |
|---|---|
| Durum | LIVE E2E IN PROGRESS / RETEST REQUIRED |
| Genel PASS | NO |
Failure öncesi PASS¶
| Adım | Sonuç |
|---|---|
| EnvFile resolution | PASS |
HostPort / ContainerPort (4243 / 4242) |
PASS |
| HostPort preflight (native 4242 conflict değil) | PASS |
| External MongoDB validation | PASS |
| SkipGitPull + AllowDirty | PASS |
Dirty image provenance (2c1590c-dirty) |
PASS |
Failure¶
| Konu | Detay |
|---|---|
| Belirti | config exit 125: unknown flag: --env-file |
| Kök neden | --env-file compose kelimesinden önce → Docker root CLI |
| Yanlış | docker --env-file <file> ... |
| Doğru | docker compose --env-file <file> -f ... config --quiet |
Detected / Fixed / Automated / Retest¶
| Madde | Durum |
|---|---|
| Detected | YES (Attempt #2) |
| Fixed | Invoke-IQVDockerCompose — compose her zaman ilk token |
| Automated regression | YES |
| Live Retest Required | YES |
Windows Docker genel durumu: LIVE E2E IN PROGRESS / RETEST REQUIRED.
Operasyon referansı: Docker kurulumu, Güncelleme ve geri alma.
Lab retest notu¶
Kirli working tree için açık -AllowDirty gerekir (<sha>-dirty, source_dirty=true). -SkipGitPull dirty'ye izin vermez. Doğrudan http://ip:port kullanıyorsanız PUBLIC_BASE_URL'i HostPort ile hizalayın (installer rewrite etmez).
Windows Docker Live E2E — Attempt #3 hazırlığı (kontrollü rollback)¶
| Evidence | Value |
|---|---|
| Durum | RETEST REQUIRED |
| Overall PASS | NO |
| Live E2E | NOT RUN (yalnız lab tooling) |
Eklenen lab-only tooling (otomatik test edildi)¶
| Madde | Ayrıntı |
|---|---|
-TestFailAt AfterComposeUp |
Compose up sonrası kontrollü hata; otomatik rollback E2E için |
| Immutable rollback snapshot | Runtime image mutation öncesi çalışan API image ID → iqv-integration-api:rollback-<short-id>-<timestamp> |
| Same-tag ForceRedeploy güvenliği | Rollback overwrite edilmiş target tag'e değil snapshot'a döner |
| MongoDB | Container/volume rollback edilmez; Database rollback = NOT PERFORMED |
| Exit code | Başarılı rollback sonrası update yine non-zero döner |
| Metadata | Başarısız update deployment metadata'yı overwrite etmez |
| Snapshot cleanup | Başarılı deploy veya başarılı rollback retag sonrası |
Windows Docker kontrollü rollback yolu = RETEST REQUIRED (Live E2E PASS yazmayın; -TestFailAt AfterComposeUp lab retest tamamlanmalı).
Önerilen lab komutu (burada çalıştırılmadı)¶
powershell
.\scripts\windows\docker\update.ps1 -SkipGitPull -AllowDirty -ForceRedeploy `
-EnvFile .\.env.docker.external -HostPort 4243 -ContainerPort 4242 `
-SkipTests -TestFailAt AfterComposeUp
Beklenen: non-zero exit, önceki API snapshot ile restore, Mongo dokunulmamış, /health/live + /health/ready sağlıklı.
Port çakışması çıkış kodu¶
Windows/Linux Docker ve native yükleyicilerde port conflict için ortak kod: 15 (EXIT_PORT_CONFLICT / EXIT_PORT).
Docker daemon yoksa Windows Docker betikleri 16 (EXIT_DOCKER_NA) ile çıkabilir.
Sonraki faz — Plan A: External MongoDB¶
API container → host.docker.internal / harici adres → host veya harici MongoDB.
| # | Adım | Status |
|---|---|---|
| 1 | Prerequisites (Docker Engine / Compose) | NOT E2E VALIDATED |
| 2 | External MongoDB erişilebilir | NOT E2E VALIDATED |
| 3 | .env (external URI; secret log yok) |
NOT E2E VALIDATED |
| 4 | install (compose up) | NOT E2E VALIDATED |
| 5 | container health / health/live / health/ready | NOT E2E VALIDATED |
| 6 | container restart | NOT E2E VALIDATED |
| 7 | host reboot | NOT E2E VALIDATED |
| 8 | update | NOT E2E VALIDATED |
| 9 | NO-OP update | NOT E2E VALIDATED |
| 10 | rollback | NOT E2E VALIDATED |
| 11 | config preservation | NOT E2E VALIDATED |
| 12 | volume preservation (varsa named volumes) | NOT E2E VALIDATED |
| 13 | uninstall (volumes opt-in silme politikası) | NOT E2E VALIDATED |
Henüz PASS yok.
Sonraki faz — Plan B: Bundled MongoDB¶
API container → Docker internal network → MongoDB container → persistent volume.
| # | Adım | Status |
|---|---|---|
| 1 | Prerequisites | NOT E2E VALIDATED |
| 2 | Bundled compose profile / stack | NOT E2E VALIDATED |
| 3 | .env |
NOT E2E VALIDATED |
| 4 | install | NOT E2E VALIDATED |
| 5 | API + Mongo container health | NOT E2E VALIDATED |
| 6 | container restart | NOT E2E VALIDATED |
| 7 | host reboot | NOT E2E VALIDATED |
| 8 | update | NOT E2E VALIDATED |
| 9 | NO-OP update | NOT E2E VALIDATED |
| 10 | rollback | NOT E2E VALIDATED |
| 11 | config preservation | NOT E2E VALIDATED |
| 12 | Mongo volume persistence | NOT E2E VALIDATED |
| 13 | uninstall (volume koruma / silme bayrakları) | NOT E2E VALIDATED |
Henüz PASS yok.
Platform notu¶
| Platform | Live E2E |
|---|---|
| Linux Docker | NOT E2E VALIDATED |
| Windows Docker | NOT E2E VALIDATED |