Kako odpravljati napake v Docker vsebnikih na Debian 13
Uvod
V tem vodiču se boste naučili, kako odpravljati napake v Docker kontejnerjih z uporabo praktičnih, začetnikom prijaznih tehnik. Težave boste prepoznali s preverjanjem statusa kontejnerja, analizo dnevnikov, pregledom konfiguracije in dostopom do okolja kontejnerja. Ta pristop vam pomaga hitro razumeti, zakaj kontejner ne deluje in kako ga popraviti.
Končni cilj: Do konca tega vodiča boste lahko prepoznali in odpravili pogoste težave Docker kontejnerjev z uporabo dnevnikov, pregledov in orodij za analizo med izvajanjem.
Predpogoji
- Ciljna publika: Začetniki sistemski administratorji
- Ocenjeni čas: ~30 minut
- Operacijski sistem: Debian 13
- Programska oprema: Docker 24.0 ali novejši
- Dovoljenja: Uporabnik s sudo privilegiji ali članstvo v docker skupini
- Strojne zahteve: Vsaj 2 GB RAM in 10 GB prostega prostora na disku
- Mrežne zahteve: Dostop do interneta za prenos slik, za ta vodič niso potrebna posebna vrata
- Zahteve: Osnovna uporaba ukazne vrstice in delujoča Docker storitev
- Združljivost: Testirano na Debian 13 in deluje na Debian 12 in Ubuntu 22.04
Korak 1: Preverite informacije o Docker sistemu
Pred odpravljanjem napak v določenem kontejnerju preverite, ali Docker sam deluje pravilno.
Zaženite naslednji ukaz:
docker system info
Videli boste podrobne informacije o Docker okolju, vključno z:
- Različica strežnika
- Pogon za shranjevanje
- Število kontejnerjev in slik
- Razpoložljivost CPU in pomnilnika
- Koreninski imenik Dockerja
To vam pomaga potrditi, da:
- Docker deluje pravilno
- Sistem ima dovolj virov
- Ni globalnih težav s konfiguracijo
Če Docker ne deluje, lahko vidite napako, kot je "Cannot connect to the Docker daemon".
Za preverjanje statusa Docker storitve:
systemctl status docker
Videli boste, ali je Docker storitev aktivna. Če ne deluje, jo zaženite:
sudo systemctl start docker
Zdaj bi morali videti storitev v aktivnem stanju.
Vedno preverite zdravje Dockerja pred odpravljanjem napak v kontejnerjih. Veliko težav s kontejnerji povzroča Docker storitev ali težave na sistemski ravni.
Korak 2: Preverite status kontejnerja
Zaženite naslednji ukaz:
docker ps
Videli boste seznam tekočih kontejnerjev s podrobnostmi, kot so ID kontejnerja, slika in status. Če se vaš kontejner prikaže s statusom "Up", trenutno deluje.
Za vključitev ustavljenih kontejnerjev:
docker ps -a
Zdaj vidite vse kontejnerje. Če vaš kontejner prikazuje "Exited", pomeni, da se je ustavil zaradi napake ali dokončal izvajanje.
Kontejner se ustavi, ko se njegov glavni proces konča. To je normalno vedenje, vendar pogosto pomeni težavo, če se nepričakovano konča.
Korak 3: Oglejte si dnevnike kontejnerja
Dnevniki prikazujejo, kaj aplikacija znotraj kontejnerja izpiše. To je najpomembnejši korak za odpravljanje napak. <CONTAINER_ID> lahko dobite z ukazom docker ps, opisanim v koraku 2.
Zaženite:
docker logs <CONTAINER_ID>
Videli boste izpis aplikacije, vključno z napakami in opozorili. Poiščite sporočila, ki nakazujejo na napake, kot so manjkajoče datoteke ali napake pri povezovanju.
Za sledenje dnevnikom v realnem času:
docker logs -f <CONTAINER_ID>
Videli boste nove vnose v dnevnik, ko se pojavijo. To je uporabno pri ponovnem zagonu kontejnerja in opazovanju vedenja.
Za ogled samo nedavnih dnevnikov:
docker logs --tail 50 <CONTAINER_ID>
Videli boste zadnjih 50 vrstic izpisa. To vam pomaga osredotočiti se na najnovejše dogodke.
Začnite z nedavnimi dnevniki, nato po potrebi preglejte celotne dnevnike.
Korak 4: Preglejte stanje kontejnerja
Docker shranjuje podrobne informacije o vsakem kontejnerju.
Zaženite:
docker inspect <CONTAINER_ID>
Videli boste strukturiran JSON izpis s podrobnostmi o konfiguraciji in izvajanju.
Za preverjanje statusa kontejnerja:
docker inspect -f '{{.State.Status}}' <CONTAINER_ID>
Videli boste preprosto vrednost, kot je "running" ali "exited", kar potrjuje stanje kontejnerja.
Za preverjanje izhodne kode:
docker inspect -f '{{.State.ExitCode}}' <CONTAINER_ID>
Videli boste številko. Vrednost 0 pomeni uspeh, medtem ko katera koli nenulta vrednost pomeni napako.
Za preverjanje politike ponovnega zagona:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <CONTAINER_ID>
Videli boste, ali je kontejner nastavljen za samodejni ponovni zagon.
Izhodne kode vam pomagajo razumeti, zakaj se je kontejner ustavil. Ko se kontejner konča, glavni proces znotraj njega vrne številčno kodo sistemu.
Pogoste izhodne kode, ki jih lahko vidite:
0– Proces se je uspešno zaključil brez napak. To običajno pomeni, da se je kontejner normalno ustavil. Na primer, skripta je dokončala svojo nalogo in se končala.1– Prišlo je do splošne napake. To je najpogostejša koda napake in običajno pomeni, da je nekaj znotraj aplikacije spodletelo, kot je manjkajoča datoteka, neveljavna konfiguracija ali napaka med izvajanjem.125– Dockerju ni uspelo zagnati kontejnerja. To običajno pomeni težavo z ukazom docker run, kot so neveljavne možnosti ali napačni parametri.126– Ukaza znotraj kontejnerja ni mogoče izvesti. To pogosto pomeni težave s pravicami ali da datoteka ni izvedljiva.127– Ukaz ni bil najden. To običajno pomeni, da določeni binarni program ali skripta ne obstaja znotraj kontejnerja.137– Kontejner je bil prisilno ustavljen. To se pogosto zgodi, ko sistemu zmanjka pomnilnika in ubije proces kontejnerja.139– Kontejner se je zrušil z napako segmentacije. To pomeni resno napako aplikacije, pogosto povezano s težavami pri dostopu do pomnilnika.143– Kontejner je bil ustavljen na urejen način. To se običajno zgodi, ko zaženete docker stop in se kontejner pravilno ustavi.
Najprej se osredotočite na kode 1, 127 in 137, saj so najpogostejše med odpravljanjem napak. Vedno kombinirajte izhodno kodo z docker logs, da razumete točen vzrok napake.
Korak 5: Dostop do okolja kontejnerja
Včasih dnevniki niso dovolj. V kontejner lahko vstopite, da ga neposredno pregledate.
Zaženite:
docker exec -it <CONTAINER_ID> /bin/bash
Vstopili boste v interaktivno lupino znotraj kontejnerja.
Če bash ni na voljo:
docker exec -it <CONTAINER_ID> /bin/sh
Zdaj lahko raziskujete kontejner.
Preverite tekoče procese kontejnerja iz gostitelja:
docker top <CONTAINER_ID>
Videli boste aktivne procese znotraj kontejnerja. Če glavni proces manjka, se lahko kontejner ustavi.
Preverite konfiguracijske datoteke in ročno preizkusite ukaze znotraj kontejnerja.
Korak 6: Spremljajte porabo virov
Kontejnerji lahko odpovejo zaradi omejenih virov.
Zaženite:
docker stats
Videli boste porabo CPU, pomnilnika in omrežja v realnem času za vse kontejnerje.
Za spremljanje določenega kontejnerja:
docker stats <CONTAINER_ID>
Videli boste živo tabelo, ki se nenehno posodablja s porabo virov za vse tekoče kontejnerje. Vsaka vrstica predstavlja kontejner, vsak stolpec pa prikazuje določeno vrsto porabe virov.
Najpomembnejši stolpci so:
- CPU % – Prikazuje, koliko CPU kontejner uporablja. Visoke vrednosti lahko kažejo na intenzivno obdelavo ali neučinkovito kodo.
- MEM USAGE / LIMIT – Prikazuje, koliko pomnilnika kontejner uporablja v primerjavi z njegovo omejitvijo. Če je poraba blizu omejitve, se lahko kontejner upočasni ali ustavi.
- MEM % – Odstotek uporabljenega pomnilnika glede na omejitev.
- NET I/O – Omrežni promet. To prikazuje, koliko podatkov je kontejner prejel in poslal. Visoke vrednosti lahko kažejo na intenzivno omrežno aktivnost.
- BLOCK I/O – Aktivnost branja in pisanja na disk. Ta stolpec prikazuje, koliko podatkov je kontejner prebral z diska in zapisal nanj.
- PIDs – Število procesov, ki tečejo znotraj kontejnerja. Zelo visoko število lahko kaže na uhajanje procesov ali nenadzorovano aplikacijo.
Če se BLOCK I/O nenehno povečuje, kontejner aktivno uporablja shranjevanje. To je normalno za baze podatkov, vendar nepričakovani skoki lahko kažejo na neučinkovito uporabo diska ali pretirano beleženje. Pri odpravljanju napak poiščite nenavadne skoke v CPU, pomnilniku ali BLOCK I/O. To informacijo kombinirajte z docker logs, da razumete, kaj kontejner počne v tistem trenutku.
Korak 7: Preverite Docker dogodke
Docker beleži dogodke, ki opisujejo, kaj se dogaja na sistemski in kontejnerski ravni. Ti dogodki vam pomagajo razumeti, kdaj se kontejner zažene, ustavi, zruši ali ponovno zažene.
Zaženite naslednji ukaz:
docker events
Videli boste tok dogodkov v živo, kot so zagon, ustavitev in ponovni zagon kontejnerja. Izpis se nenehno posodablja v realnem času.
Pritisnite Ctrl + C, da ustavite tok v živo.
Filtrirajte dogodke za določen kontejner
Zaženite:
docker events --filter container=<CONTAINER_ID>
Videli boste samo dogodke, povezane z izbranim kontejnerjem. To vam pomaga osredotočiti se na eno delovno obremenitev.
Prikažite dogodke iz določenega časovnega obdobja
Za ogled dogodkov iz določenega trenutka:
docker events --since 10m
Videli boste dogodke iz zadnjih 10 minut.
Za določitev začetnega in končnega časa:
docker events --since 2026-01-01T10:00:00 --until 2026-01-01T11:00:00
Videli boste dogodke, ki so se zgodili v tem časovnem obdobju.
Uporabite lahko relativni čas, kot so 10m, 1h, ali polne časovne žige.
Oblikujte izpis dogodkov
Zaženite:
docker events --format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.ID}}'
Videli boste oblikovan izpis z izbranimi polji. To olajša branje ali integracijo s skripti.
Uporabite oblikovanje, da poudarite samo informacije, ki jih potrebujete med odpravljanjem napak.
Filtrirajte določene vrste dogodkov
Dogodke lahko filtrirate, da se osredotočite na določene težave.
Ustavitev ali zrušitev kontejnerja
Zaženite:
docker events --filter event=die
Videli boste dogodke, ko se kontejnerji ustavijo. To pomaga prepoznati nepričakovane zaustavitve.
Dogodki pomanjkanja pomnilnika
Zaženite:
docker events --filter event=oom
Videli boste dogodke, ko je kontejner ustavljen zaradi omejitev pomnilnika. To je ključno za diagnosticiranje težav z viri.
OOM pomeni Out Of Memory. Sistem ustavi kontejner, ko preseže razpoložljiv pomnilnik.
Ponovni zagon kontejnerja
Zaženite:
docker events --filter event=restart
Videli boste, kdaj se kontejnerji ponovno zaženejo. Pogosti dogodki ponovnega zagona lahko kažejo na zanko zrušitve.
Kombinirajte filtre in časovno obdobje
Zaženite:
docker events --since 10m --filter event=die
Videli boste dogodke ustavitve kontejnerja iz zadnjih 10 minut. To pomaga zožiti nedavne napake.
Kombinirajte filtre in časovna obdobja, da hitro prepoznate vzorce, kot so ponavljajoče se zrušitve ali težave s pomnilnikom.
Korak 8: Preverite uporabo diska in očistite neuporabljene slike
Docker shranjuje slike, kontejnerje, volumne in predpomnilnik na disku. Sčasoma lahko neuporabljeni podatki porabijo veliko prostora in povzročijo težave.
Zaženite naslednji ukaz:
docker system df
Videli boste povzetek uporabe diska, vključno z:
- Slike
- Kontejnerji
- Lokalni volumni
- Predpomnilnik gradnje
Vsak odsek prikazuje:
- Skupno število
- Aktivne postavke
- Velikost
- Prostor, ki ga je mogoče povrniti
To vam pomaga razumeti, koliko prostora na disku uporablja Docker in koliko ga je mogoče očistiti.
Stolpec "Reclaimable" prikazuje, koliko prostora je mogoče sprostiti z odstranitvijo neuporabljenih virov.
Za ogled neuporabljenih slik zaženite:
docker images -f dangling=true
Videli boste slike, ki niso označene in jih ne uporablja noben kontejner. Te so varni kandidati za odstranitev.
Za odstranitev neuporabljenih slik zaženite:
docker image prune
Vprašani boste za potrditev. Po potrditvi se neuporabljene slike izbrišejo in prostor na disku se sprosti.
Za odstranitev vseh neuporabljenih slik, ne samo visečih:
docker image prune -a
Odstranili boste vse slike, ki jih ne uporablja noben kontejner.
Pomembno: Ta ukaz odstrani slike, ki jih boste morda potrebovali kasneje. Prepričajte se, da noben potreben kontejner ne temelji na njih.
Redno čiščenje pomaga preprečiti težave s prostorom na disku, ki lahko povzročijo, da kontejnerji odpovejo ali se obnašajo nepredvidljivo.
Preverjanje in testiranje
- Zaženite
docker psin potrdite, da je status kontejnerja pravilen. - Zaženite
docker logsin preverite, ali so napake prepoznane ali odpravljene. - Zaženite
docker inspectin potrdite, da status in izhodna koda ustrezata pričakovanjem. - Uporabite
docker execza potrditev, da procesi tečejo znotraj kontejnerja. - Če je odpravljanje napak uspešno, bi moral kontejner ostati v stanju izvajanja brez kritičnih napak v dnevnikih.
Vračanje sprememb
Če ste med odpravljanjem napak naredili spremembe, lahko obnovite čisto stanje.
Pred odstranitvijo kontejnerjev varnostno kopirajte pomembne podatke.
Ustavite kontejner:
docker stop <CONTAINER_ID>
Videli boste potrditev, da je kontejner ustavljen.
Odstranite kontejner:
docker rm <CONTAINER_ID>
Videli boste potrditev, da je kontejner odstranjen.
Ponovno ustvarite kontejner:
docker run <OPTIONS> <IMAGE_NAME>
Ustvarjen je nov kontejner iz slike.
Pomembno: Odstranitev kontejnerja izbriše njegovo stanje izvajanja. Podatki so izgubljeni, razen če so shranjeni v volumnih.
Odpravljanje težav
Kontejner se takoj izklopi
Preverite docker logs za sporočila o napakah. Ta običajno pojasnijo težavo.
Ne morem dostopati do kontejnerja
Prepričajte se, da teče z uporabo docker ps.
Dnevniki niso na voljo
Prepričajte se, da aplikacija izpisuje izhod na stdout ali stderr.
Kontejner se nenehno ponovno zažene
Preverite politiko ponovnega zagona in dnevnike, da prepoznate zanke zrušitve.
Visoka poraba virov
Uporabite docker stats za potrditev skokov CPU ali pomnilnika.
Zaključek
Naučili ste se, kako odpravljati napake v Docker kontejnerjih s preverjanjem njihovega statusa, analizo dnevnikov, pregledom konfiguracije in dostopom do okolja kontejnerja. Te tehnike vam omogočajo hitro prepoznavanje in reševanje pogostih težav. Kot naslednji korak raziščite odpravljanje napak v Docker Compose in centralizirane sisteme beleženja za upravljanje več kontejnerjev.