Ažuriranje kontejnera bez zastoja
Kako da ažuriraš slike tako da servis ostane u funkciji i da možeš da se vratiš na staro: fiksiranje verzija, health checks, redosled koraka i automatizacija.
Ažurirano 23. avgust 2026.
Ažuriranje kontejnera nije „povuci novu sliku” nego „zameni pokrenutu verziju novom i budi u stanju da se vratiš nazad”. Razlika se vidi tačno jednom: kada nova verzija ne uspe da se pokrene.
Postupak koji funkcioniše
cd /opt/myapp
docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f --tail 100
Compose ponovo kreira samo servise čija se slika promenila, a ostale ostavlja na miru. Prekid rada traje samo onoliko sekundi koliko je potrebno da se kontejner restartuje.
Ali pre nego što ovo uradiš, ispuni dva uslova.
Prvo: verzije su fiksirane. U fajlu mora da piše postgres:17.2, a ne postgres:latest. U suprotnom će pull jednog dana doneti glavnu verziju koja menja format podataka i vraćanje nazad postaje nemoguće.
Drugo: bekup je svež. Ažuriranje koje pokvari bazu pokvari je nepovratno. Pre promene glavne verzije napravi dump — vidi šta treba bekupovati.
Zamena bez prekida
Za web servis iza revers proksija, prekid rada se svodi na skoro nulu ako kontejner ima health check: proksi će početi da šalje zahteve samo spremnoj instanci.
services:
app:
image: ghcr.io/example/app:1.5.0
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"]
interval: 5s
timeout: 3s
retries: 6
start_period: 20s
docker inspect -f '{{.State.Health.Status}}' <container>
Bez health check-a, Compose smatra kontejner spremnim čim se proces pokrene — dok aplikacija još čita svoja podešavanja i primenjuje migracije.
Ne briši staru sliku dok nova verzija ne radi bar sat vremena. Vraćanje nazad znači da vratiš
image: ...:1.4.2i pokrenešdocker compose up -d, ali samo dok je stara slika još na disku.docker image prune -aodmah posle ažuriranja oduzima ti tu opciju.
Vraćanje nazad
sed -i 's|app:1.5.0|app:1.4.2|' compose.yaml
docker compose up -d app
docker compose logs -f --tail 50 app
Ako je nova verzija već promenila šemu baze, vraćanje samo slike nije dovoljno — moraćeš da povratiš iz bekupa. Zato se glavna ažuriranja rade u mirno vreme i sa proverenim bekupom: vidi proba povraćaja.
Automatizacija: budi pažljiv
Watchtower može sam da ažurira kontejnere. Za kućne servise to je zgodno; za produkciju je rizik: ažuriranje stigne noću, pokvari bazu i niko ne primeti. Razuman kompromis su samo notifikacije:
services:
watchtower:
image: containrrr/watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --monitor-only --schedule "0 0 6 * * *"
Saznaš da je izašla nova verzija i ažuriraš ručno u vreme koje ti odgovara.
Restartovanje mašine
Sistemski paketi se ažuriraju odvojeno od kontejnera. Posle ažuriranja kernela potreban je restart, a kontejneri sa restart: unless-stopped se sami vraćaju. Testiraj ovo unapred — sa sudo reboot u mirno vreme, ne tokom incidenta. Meki restart iz panela radi sve dok je qemu-guest-agent instaliran na sistemu.
Česte greške
pullbezup -d. Nova slika je preuzeta, ali stari kontejner se još uvek vrti.- Disk je zatrpan starim slikama. Pokreni
docker image prunejednom mesečno — ali ne odmah posle ažuriranja. Vidi prostor na disku. - Ažurirao si sve odjednom. Nešto se pokvari — a ne možeš da utvrdiš šta. Ažuriraj jedan servis po jedan.
- Nisi pročitao napomene o izdanju. Nekompatibilan konfiguracioni fajl je najčešći uzrok neuspeha posle promene glavne verzije; vidi objašnjenje u čestim Docker problemima.