Skip to content
VDS · Docker i kontejneri

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.2 i pokreneš docker compose up -d, ali samo dok je stara slika još na disku. docker image prune -a odmah 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

  • pull bez up -d. Nova slika je preuzeta, ali stari kontejner se još uvek vrti.
  • Disk je zatrpan starim slikama. Pokreni docker image prune jednom 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.