- Bruk av Dockers innebygde omstartspolicyer for å håndtere systemfeil.
- Implementering av tilpassede skript og cron for containere med usunne tilstander.
- Avansert integrasjon med systemd for å kontrollere oppstarts- og avslutningssekvensen.
- Eksterne overvåkingsalternativer og verktøy som Podman Quadlet.
Jeg er sikker på at dette har skjedd med deg: du har en tjeneste som kjører i Dokker som av mystiske grunner setter seg fast med noen få dagers mellomrom. Hvordan starter jeg en Docker-container på nytt automatisk når den slutter å svare? Det er frustrerende å prøve å optimalisere kode eller konfigurasjoner uten at noe fungerer, bare for å innse at en enkel manuell omstart løser problemet og holder alt i gang i en uke til. I stedet for å stadig sjekke tiden, er den ideelle løsningen å sette opp et system som gjør dette skitne arbeidet for deg.
Å administrere containertilgjengelighet innebærer mer enn bare å sørge for at de starter automatisk når serveren slås på. sørge for at de svarer riktig på forespørslene. Noen ganger ser det ut til at containeren er «levende» for Docker, men applikasjonen inni svarer ikke, noe som tvinger oss til å lete etter løsninger som spenner fra grunnleggende daemon-parametere til oppretting av komplekse tjenester i operativsystemet.
Dockers innebygde omstartspolicyer
Den enkleste måten å starte en Docker-container på nytt automatisk er ved å bruke flagget --restart når du starter en container eller bruker kommandoen docker update Hvis containeren allerede er opprettet, tilbyr Docker flere alternativer avhengig av dine behov. For eksempel policyen alltid Dette vil føre til at containeren alltid starter på nytt, uavhengig av om prosessen endte med en feil eller om det var selve Docker-daemonen som startet på nytt.
Hvis du foretrekker noe mer kirurgisk, med mindre stoppet Dette er det beste valget for mange. Denne konfigurasjonen er identisk med den forrige, bortsett fra at hvis du stopper containeren manuelt for vedlikehold, Docker vil ikke forsøke å slå den på. automatisk etter en omstart av serveren, med respekt for din manuelle avgjørelse.
For de som bare ønsker å handle som svar på kritiske feil, finnes det feilmeldingDenne policyen utløser bare en omstart hvis containeren avsluttes med en avslutningskode som ikke er null. Du kan til og med begrense dette ved å legge til et maksimalt antall nye forsøk, slik at systemet ikke går inn i en uendelig omstartsløkke hvis feilen er vedvarende og kritisk.

Automatisering for «usunne» containere
Det er her det blir interessant. Noen ganger vises en beholder fortsatt som «Opp» (på), men helsestatusen er usunn fordi den ikke stryker i interne kontroller. Tidligere retningslinjer er ineffektive her, ettersom prosessen ikke er teknisk sett død. For å løse dette kan vi implementere direktivet HELSESJEKK i Dockerfilen eller i Docker Compose-filen, definere en kommando (for eksempel en curl til en bestemt port) for å bekrefte at appen svarer.
Når vi har satt opp helsesjekken, kan vi opprette en Bash-skript som kjører med noen minutters mellomrom ved hjelp av crontab fra Linux. Dette skriptet skal filtrere ut containere som er i en tilstand unhealthy eller de som har avsluttet med feilkode 128 og kjørt en docker restart om dem.
For at dette skal fungere problemfritt og automatisk starte en Docker-container på nytt, er det viktig at brukeren som kjører cron-jobben har de nødvendige tillatelsene. tillatelser som kreves i docker-gruppenPå denne måten overvåker systemet miljøet hvert 5. eller 10. minutt og henter frem enhver tjeneste som har blitt «zombie», noe som garanterer nesten total tilgjengelighet uten menneskelig inngripen.
Avansert integrasjon med systemd
Når du jobber i mer profesjonelle miljøer, vil du kanskje at beholderne dine skal oppføre seg slik innebygde Linux-tjenesterIntegrere Dokker Systemd lar deg administrere komplekse avhengigheter, som å sørge for at databasen starter før webapplikasjonen. Dette oppnås ved å opprette filer. .service i ruten /etc/systemd/system/.
Vi kan designe en av- og påslåingssekvens Kontrollert. Ved å bruke tilpassede skript koblet til systemd, er det mulig å stoppe containere i omvendt rekkefølge av avhengighetene deres for å forhindre datakorrupsjon. Ved å bruke typen oneshot og konfigurering av targets passende (som f.eks. multi-user.target o shutdown.target), håndterer serveren hele containerens livssyklus.
Et annet kraftig alternativ for å automatisk starte en Docker-container på nytt når den slutter å svare, er å bruke flagget --rm i kombinasjon med systemd. Dette gjør at containeren kan fjernes ved stopp og en ny opprettes fra basisimaget ved oppstart, noe som sikrer at Beholderens tilstand må alltid være ren og uforandret.delegering av datapersistens utelukkende til eksterne volumer.

Eksterne verktøy og moderne alternativer
Hvis du ikke vil bry deg med å skrive Bash-skript, finnes det tredjepartsverktøy tilgjengelig. Det finnes åpen kildekode-applikasjoner som er spesielt utviklet for å starte containere på nytt basert på en etablert tidsplanDette er veldig nyttig for gjentakende oppgaver som å fornye SSL-sertifikater. På samme måte kan verktøy som Oppetid Kuma De lar deg overvåke tilstanden til tjenester fra et visuelt dashbord og sende varsler til Telegram eller Gotify hvis noe går galt. De er alle veldig nyttige for automatisk å starte en Docker-container på nytt når den slutter å svare.
For de som leter etter et lettere eller naturlig alternativ, Podman Det er et utmerket alternativ. Takket være den daemonløse arkitekturen og funksjonaliteten til KvallDen lar deg lage enkle deklarative filer som systemd automatisk konverterer til optimaliserte tjenester, og tilbyr en mye mer organisk integrasjon enn tradisjonell Docker.
Å ha full kontroll over livssyklusen til tjenestene dine innebærer å kombinere bruken av omstartsregler, konstant overvåking gjennom helsesjekker og, i mer komplekse tilfeller, støtte fra systemd eller overvåkingsverktøy slik at infrastrukturen din er robust og ikke er avhengig av at noen husker å starte serveren på nytt manuelt hver uke.
Redaktør spesialisert i teknologi og internettspørsmål med mer enn ti års erfaring i ulike digitale medier. Jeg har jobbet som redaktør og innholdsskaper for e-handel, kommunikasjon, online markedsføring og reklameselskaper. Jeg har også skrevet på nettsteder innen økonomi, finans og andre sektorer. Arbeidet mitt er også min lidenskap. Nå, gjennom artiklene mine i Tecnobits, Jeg prøver å utforske alle nyhetene og nye mulighetene som teknologiverdenen tilbyr oss hver dag for å forbedre livene våre.