- Korištenje Dockerovih izvornih pravila ponovnog pokretanja za rješavanje sistemskih kvarova.
- Implementacija prilagođenih skripti i crona za kontejnere s neispravnim stanjima.
- Napredna integracija sa systemd-om za kontrolu redoslijeda pokretanja i gašenja.
- Alternative i alati za vanjsko praćenje kao što je Podman Quadlet.
Siguran sam da vam se ovo dogodilo: imate pokrenutu uslugu Lučki radnik koji se, iz misterioznih razloga, zaglavi svakih nekoliko dana. Kako automatski ponovno pokrenuti Docker kontejner kada prestane reagirati? Frustrirajuće je pokušavati optimizirati kod ili konfiguracije i ništa ne funkcionirati, samo da biste shvatili da jednostavno ručno ponovno pokretanje rješava problem i održava sve u pogonu još tjedan dana. Umjesto stalnog provjeravanja vremena, idealno rješenje je postaviti sustav koji će taj prljavi posao obaviti umjesto vas.
Upravljanje dostupnošću kontejnera uključuje više od pukog osiguravanja njihovog automatskog pokretanja kada se poslužitelj uključi. osigurati da ispravno reagiraju na zahtjeve. Ponekad se kontejner Dockeru čini "živim", ali aplikacija unutra ne reagira, što nas prisiljava da tražimo rješenja u rasponu od osnovnih parametara demona do stvaranja složenih usluga u operativnom sustavu.
Dockerove izvorne politike ponovnog pokretanja
Najjednostavniji način za automatsko ponovno pokretanje Docker kontejnera je korištenjem zastavice --restart prilikom pokretanja kontejnera ili korištenja naredbe docker update Ako je kontejner već kreiran, Docker nudi nekoliko opcija ovisno o vašim potrebama. Na primjer, pravila uvijek Zbog toga će se kontejner uvijek ponovno pokrenuti, bez obzira na to je li proces završio s greškom ili je sam Docker daemon ponovno pokrenuo operaciju.
Ako više volite nešto kirurškije, osim ako nije zaustavljeno Ovo je najbolji izbor za mnoge. Ova konfiguracija je identična prethodnoj, osim što ako ručno zaustavite spremnik radi održavanja, Docker ga neće pokušati uključiti. automatski nakon ponovnog pokretanja servera, poštujući vašu ručnu odluku.
Za one koji žele djelovati samo kao odgovor na kritične neuspjehe, postoji prilikom kvaraOva politika pokreće ponovno pokretanje samo ako se kontejner završi s izlaznim kodom koji nije nula. To možete čak i ograničiti dodavanjem maksimalnog broja ponovnih pokušaja, sprječavajući sustav da uđe u beskonačnu petlju ponovnog pokretanja ako je greška trajna i kritična.

Automatizacija za "neispravne" kontejnere
Tu stvari postaju zanimljive. Ponekad se kontejner i dalje prikazuje kao "Uključeno", ali njegov zdravstveni status je nezdrav jer ne prolazi interne provjere. Prethodne politike ovdje nisu učinkovite jer proces tehnički nije mrtav. Da bismo to riješili, možemo implementirati direktivu PROVJERA ZDRAVLJA u Dockerfileu ili u Docker Compose datoteci, definirajući naredbu (kao što je curl na određeni port) kako biste provjerili odgovara li aplikacija.
Nakon što postavimo provjeru ispravnosti, možemo stvoriti Bash skripta koji se pokreće svakih nekoliko minuta koristeći crontab iz Linuxa. Ovaj bi skript trebao filtrirati kontejnere koji su u stanju unhealthy ili oni koji su izašli s kodom greške 128 i pokrenuli docker restart o njima.
Da bi ovo funkcioniralo glatko i automatski ponovno pokrenulo Docker kontejner, bitno je da korisnik koji pokreće cron zadatak ima potrebna dopuštenja. dopuštenja potrebna u docker grupiNa taj način sustav prati okolinu svakih 5 ili 10 minuta i aktivira bilo koju uslugu koja je postala "zombi", jamčeći gotovo potpunu dostupnost bez ljudske intervencije.
Napredna integracija sa systemd-om
Kada radite u profesionalnijim okruženjima, možda ćete htjeti da se vaši kontejneri ponašaju kao izvorne Linux uslugeIntegrirati Lučki radnik Systemd vam omogućuje upravljanje složenim ovisnostima, poput osiguravanja da se baza podataka pokrene prije web aplikacije. To se postiže stvaranjem datoteka .service u ruti /etc/systemd/system/.
Možemo dizajnirati redoslijed uključivanja i isključivanja napajanja Kontrolirano. Korištenjem prilagođenih skripti povezanih sa systemd-om, moguće je zaustaviti kontejnere obrnutim redoslijedom njihovih ovisnosti kako bi se spriječilo oštećenje podataka. Korištenjem tipa oneshot i konfiguriranje targets prikladno (npr. multi-user.target o shutdown.target), poslužitelj obrađuje cijeli životni ciklus kontejnera.
Druga moćna opcija za automatsko ponovno pokretanje Docker kontejnera kada prestane reagirati je korištenje zastavice --rm u kombinaciji sa systemd. To omogućuje uklanjanje kontejnera prilikom zaustavljanja i stvaranje novog iz osnovne slike prilikom pokretanja, osiguravajući da Stanje spremnika mora uvijek biti čisto i nepromijenjeno.delegiranje trajnosti podataka isključivo na vanjske volumene.

Vanjski alati i moderne alternative
Ako se ne želite zamarati pisanjem Bash skripti, dostupni su alati trećih strana. Postoje aplikacije otvorenog koda posebno dizajnirane za ponovno pokretanje kontejnera na temelju utvrđeni rasporedOvo je vrlo korisno za ponavljajuće zadatke poput obnavljanja SSL certifikata. Slično tome, alati poput Vrijeme rada Kuma Omogućuju vam praćenje stanja servisa s vizualne nadzorne ploče i slanje obavijesti Telegramu ili Gotifyju ako nešto pođe po zlu. Svi su vrlo korisni za automatsko ponovno pokretanje Docker kontejnera kada prestane reagirati.
Za one koji traže lakšu ili izvornu alternativu, Podman To je izvrsna opcija. Zahvaljujući svojoj arhitekturi bez demona i funkcionalnosti KvadletOmogućuje vam stvaranje jednostavnih deklarativnih datoteka koje systemd automatski pretvara u optimizirane usluge, nudeći puno organskiju integraciju od tradicionalnog Dockera.
Potpuna kontrola nad životnim ciklusom vaših usluga uključuje kombiniranje korištenja pravila ponovnog pokretanja, stalni nadzor putem zdravstveni pregledi a u složenijim slučajevima, podršku systemd ili alati za praćenje kako bi vaša infrastruktura bila robusna i ne bi ovisila o tome da se netko svaki tjedan sjeti ručno ponovno pokrenuti poslužitelj.
Urednik specijaliziran za pitanja tehnologije i interneta s više od deset godina iskustva u različitim digitalnim medijima. Radio sam kao urednik i kreator sadržaja za tvrtke koje se bave e-trgovinom, komunikacijom, internetskim marketingom i oglašavanjem. Pisao sam i na web stranicama o ekonomiji, financijama i drugim sektorima. Moj posao je također moja strast. Sada, kroz moje članke u Tecnobits, nastojim istražiti sve novosti i nove mogućnosti koje nam svijet tehnologije svakodnevno nudi za poboljšanje života.