Kako otkloniti pogreške u Docker spremnicima na Debianu 13
Uvod
U ovom vodiču naučit ćete kako otkloniti pogreške u Docker kontejnerima koristeći praktične, početnicima prilagođene tehnike. Identificirate probleme provjerom statusa kontejnera, analizom logova, pregledom konfiguracije i pristupom okruženju kontejnera. Ovaj pristup pomaže vam brzo razumjeti zašto kontejner ne uspijeva i kako ga popraviti.
Krajnji cilj: Do kraja ovog vodiča, moći ćete identificirati i riješiti uobičajene probleme s Docker kontejnerima koristeći logove, inspekciju i alate za analizu u vrijeme izvođenja.
Preduvjeti
- Ciljana publika: Početnici sistem administratori
- Procijenjeno vrijeme: ~30 minuta
- Operativni sustav: Debian 13
- Softver: Docker 24.0 ili noviji
- Dozvole: Korisnik s sudo privilegijama ili članstvo u docker grupi
- Hardverski zahtjevi: Najmanje 2 GB RAM-a i 10 GB slobodnog prostora na disku
- Mrežni zahtjevi: Pristup internetu za preuzimanje slika, nisu potrebni specifični portovi za ovaj vodič
- Zahtjevi: Osnovno korištenje komandne linije i pokrenuta Docker usluga
- Kompatibilnost: Testirano na Debian 13 i radi na Debian 12 i Ubuntu 22.04
Korak 1: Provjerite informacije o Docker sustavu
Prije otklanjanja pogrešaka u specifičnom kontejneru, provjerite radi li Docker ispravno.
Pokrenite sljedeću naredbu:
docker system info
Vidjet ćete detaljne informacije o Docker okruženju, uključujući:
- Verziju servera
- Upravljački program za pohranu
- Broj kontejnera i slika
- Dostupnost CPU-a i memorije
- Root direktorij Dockera
Ovo vam pomaže potvrditi da:
- Docker radi ispravno
- Sustav ima dovoljno resursa
- Nema globalnih problema s konfiguracijom
Ako Docker ne radi, možete vidjeti grešku poput "Cannot connect to the Docker daemon".
Za provjeru statusa Docker usluge:
systemctl status docker
Vidjet ćete je li Docker usluga aktivna. Ako ne radi, pokrenite je:
sudo systemctl start docker
Sada biste trebali vidjeti uslugu u aktivnom stanju.
Uvijek provjerite zdravlje Dockera prije otklanjanja pogrešaka u kontejnerima. Mnogi problemi s kontejnerima uzrokovani su Docker uslugom ili problemima na razini sustava.
Korak 2: Provjerite status kontejnera
Pokrenite sljedeću naredbu:
docker ps
Vidjet ćete popis pokrenutih kontejnera s detaljima kao što su ID kontejnera, slika i status. Ako se vaš kontejner pojavljuje sa statusom "Up", trenutno je pokrenut.
Za uključivanje zaustavljenih kontejnera:
docker ps -a
Sada vidite sve kontejnere. Ako vaš kontejner pokazuje "Exited", to znači da je zaustavljen zbog greške ili završene izvršavanja.
Kontejner se zaustavlja kada njegov glavni proces izađe. Ovo je normalno ponašanje, ali često ukazuje na problem ako izađe neočekivano.
Korak 3: Pregledajte logove kontejnera
Logovi pokazuju što aplikacija unutar kontejnera ispisuje. Ovo je najvažniji korak za otklanjanje pogrešaka. Možete dobiti <CONTAINER_ID> putem naredbe docker ps opisane u koraku 2.
Pokrenite:
docker logs <CONTAINER_ID>
Vidjet ćete izlaz aplikacije, uključujući greške i upozorenja. Potražite poruke koje ukazuju na neuspjehe kao što su nedostajuće datoteke ili greške u vezi.
Za praćenje logova u stvarnom vremenu:
docker logs -f <CONTAINER_ID>
Vidjet ćete nove unose logova kako se pojavljuju. Ovo je korisno kada ponovno pokrećete kontejner i promatrate ponašanje.
Za pregled samo nedavnih logova:
docker logs --tail 50 <CONTAINER_ID>
Vidjet ćete posljednjih 50 redaka izlaza. Ovo vam pomaže da se usredotočite na najnovije događaje.
Počnite s nedavnim logovima, a zatim pregledajte cijele logove ako je potrebno.
Korak 4: Pregledajte stanje kontejnera
Docker pohranjuje detaljne informacije o svakom kontejneru.
Pokrenite:
docker inspect <CONTAINER_ID>
Vidjet ćete strukturirani JSON izlaz s detaljima o konfiguraciji i izvođenju.
Za provjeru statusa kontejnera:
docker inspect -f '{{.State.Status}}' <CONTAINER_ID>
Vidjet ćete jednostavnu vrijednost kao što je "running" ili "exited", što potvrđuje stanje kontejnera.
Za provjeru izlaznog koda:
docker inspect -f '{{.State.ExitCode}}' <CONTAINER_ID>
Vidjet ćete broj. Vrijednost 0 znači uspjeh, dok bilo koja vrijednost različita od nule ukazuje na grešku.
Za provjeru politike ponovnog pokretanja:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' <CONTAINER_ID>
Vidjet ćete je li kontejner konfiguriran za automatsko ponovno pokretanje.
Izlazni kodovi pomažu vam razumjeti zašto je kontejner zaustavljen. Kada kontejner izađe, glavni proces unutar njega vraća numerički kod sustavu.
Uobičajeni izlazni kodovi koje možete vidjeti:
0– Proces je uspješno završen bez grešaka. Ovo obično znači da je kontejner normalno zaustavljen. Na primjer, skripta je završila svoj zadatak i izašla.1– Došlo je do opće greške. Ovo je najčešći kod neuspjeha i obično znači da je nešto unutar aplikacije neuspjelo, kao što je nedostajuća datoteka, nevažeća konfiguracija ili greška u izvođenju.125– Docker nije uspio pokrenuti kontejner. Ovo obično ukazuje na problem s docker run naredbom, kao što su nevažeće opcije ili netočni parametri.126– Naredba unutar kontejnera ne može se izvršiti. Ovo često znači probleme s dozvolama ili da datoteka nije izvršna.127– Naredba nije pronađena. Ovo obično znači da specificirani binarni ili skripta ne postoji unutar kontejnera.137– Kontejner je prisilno zaustavljen. Ovo se često događa kada sustav ostane bez memorije i ubije proces kontejnera.139– Kontejner se srušio s greškom segmentacije. Ovo ukazuje na ozbiljnu grešku aplikacije, često povezanu s problemima pristupa memoriji.143– Kontejner je zaustavljen na uredan način. Ovo se obično događa kada pokrenete docker stop i kontejner se ispravno isključi.
Prvo se usredotočite na kodove 1, 127 i 137, jer su najčešći tijekom otklanjanja pogrešaka. Uvijek kombinirajte izlazni kod s docker logovima kako biste razumjeli točan uzrok neuspjeha.
Korak 5: Pristupite okruženju kontejnera
Ponekad logovi nisu dovoljni. Možete ući u kontejner kako biste ga izravno pregledali.
Pokrenite:
docker exec -it <CONTAINER_ID> /bin/bash
Ulazite u interaktivnu ljusku unutar kontejnera.
Ako bash nije dostupan:
docker exec -it <CONTAINER_ID> /bin/sh
Sada možete istraživati kontejner.
Provjerite procese pokrenutog kontejnera s hosta:
docker top <CONTAINER_ID>
Vidjet ćete aktivne procese unutar kontejnera. Ako glavni proces nedostaje, kontejner se može zaustaviti.
Provjerite konfiguracijske datoteke i testirajte naredbe ručno unutar kontejnera.
Korak 6: Pratite korištenje resursa
Kontejneri mogu ne uspjeti zbog ograničenih resursa.
Pokrenite:
docker stats
Vidjet ćete stvarno vrijeme korištenja CPU-a, memorije i mreže za sve kontejnere.
Za praćenje specifičnog kontejnera:
docker stats <CONTAINER_ID>
Vidjet ćete živu tablicu koja se kontinuirano ažurira s korištenjem resursa za sve pokrenute kontejnere. Svaki red predstavlja kontejner, a svaki stupac prikazuje specifičnu vrstu korištenja resursa.
Najvažniji stupci su:
- CPU % – Prikazuje koliko CPU-a kontejner koristi. Visoke vrijednosti mogu ukazivati na intenzivnu obradu ili neučinkovit kod.
- MEM USAGE / LIMIT – Prikazuje koliko memorije kontejner koristi u usporedbi s njegovim ograničenjem. Ako je korištenje blizu ograničenja, kontejner se može usporiti ili biti zaustavljen.
- MEM % – Postotak korištene memorije u odnosu na ograničenje.
- NET I/O – Mrežni promet. Ovo pokazuje koliko je podataka kontejner primio i poslao. Visoke vrijednosti mogu ukazivati na intenzivnu mrežnu aktivnost.
- BLOCK I/O – Aktivnost čitanja i pisanja na disku. Ovaj stupac pokazuje koliko je podataka kontejner pročitao s diska i zapisao na disk.
- PIDs – Broj procesa koji se izvode unutar kontejnera. Vrlo visok broj može ukazivati na curenje procesa ili nekontroliranu aplikaciju.
Ako BLOCK I/O stalno raste, kontejner aktivno koristi pohranu. Ovo je normalno za baze podataka, ali neočekivani skokovi mogu ukazivati na neučinkovito korištenje diska ili pretjerano logiranje. Prilikom otklanjanja pogrešaka, potražite neobične skokove u CPU-u, memoriji ili BLOCK I/O. Kombinirajte ove informacije s docker logovima kako biste razumjeli što kontejner radi u tom trenutku.
Korak 7: Provjerite Docker događaje
Docker bilježi događaje koji opisuju što se događa na razini sustava i kontejnera. Ovi događaji pomažu vam razumjeti kada kontejner počinje, zaustavlja se, ruši ili ponovno pokreće.
Pokrenite sljedeću naredbu:
docker events
Vidjet ćete prijenos događaja uživo kao što su pokretanje, zaustavljanje i ponovno pokretanje kontejnera. Izlaz se kontinuirano ažurira u stvarnom vremenu.
Pritisnite Ctrl + C za zaustavljanje prijenosa uživo.
Filtrirajte događaje za specifičan kontejner
Pokrenite:
docker events --filter container=<CONTAINER_ID>
Vidjet ćete samo događaje vezane uz odabrani kontejner. Ovo vam pomaže da se usredotočite na jedan radni zadatak.
Prikažite događaje iz specifičnog vremenskog raspona
Za pregled događaja iz specifične točke u vremenu:
docker events --since 10m
Vidjet ćete događaje iz posljednjih 10 minuta.
Za definiranje početnog i završnog vremena:
docker events --since 2026-01-01T10:00:00 --until 2026-01-01T11:00:00
Vidjet ćete događaje koji su se dogodili unutar tog vremenskog raspona.
Možete koristiti relativno vrijeme kao 10m, 1h, ili pune vremenske oznake.
Formatirajte izlaz događaja
Pokrenite:
docker events --format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.ID}}'
Vidjet ćete formatirani izlaz s odabranim poljima. Ovo olakšava čitanje ili integraciju sa skriptama.
Koristite formatiranje kako biste istaknuli samo informacije koje su vam potrebne tijekom otklanjanja pogrešaka.
Filtrirajte specifične vrste događaja
Možete filtrirati događaje kako biste se usredotočili na specifične probleme.
Zaustavljanje ili rušenje kontejnera
Pokrenite:
docker events --filter event=die
Vidjet ćete događaje kada se kontejneri zaustave. Ovo pomaže identificirati neočekivana isključenja.
Događaji izvan memorije
Pokrenite:
docker events --filter event=oom
Vidjet ćete događaje kada je kontejner ubijen zbog ograničenja memorije. Ovo je ključno za dijagnosticiranje problema s resursima.
OOM znači Out Of Memory. Sustav zaustavlja kontejner kada premaši dostupnu memoriju.
Ponovno pokretanje kontejnera
Pokrenite:
docker events --filter event=restart
Vidjet ćete kada se kontejneri ponovno pokreću. Česti događaji ponovnog pokretanja mogu ukazivati na petlju rušenja.
Kombinirajte filtre i vremenski raspon
Pokrenite:
docker events --since 10m --filter event=die
Vidjet ćete događaje zaustavljanja kontejnera iz posljednjih 10 minuta. Ovo pomaže suziti nedavne neuspjehe.
Kombinirajte filtre i vremenske raspone kako biste brzo identificirali obrasce kao što su ponovljena rušenja ili problemi s memorijom.
Korak 8: Provjerite korištenje diska i očistite neiskorištene slike
Docker pohranjuje slike, kontejnere, volumene i predmemoriju na disku. S vremenom, neiskorišteni podaci mogu zauzeti značajan prostor i uzrokovati probleme.
Pokrenite sljedeću naredbu:
docker system df
Vidjet ćete sažetak korištenja diska, uključujući:
- Slike
- Kontejnere
- Lokalne volumene
- Predmemoriju izgradnje
Svaki odjeljak prikazuje:
- Ukupan broj
- Aktivne stavke
- Veličinu
- Prostor koji se može povratiti
Ovo vam pomaže razumjeti koliko prostora na disku Docker koristi i koliko se može očistiti.
Stupac "Reclaimable" pokazuje koliko prostora se može osloboditi uklanjanjem neiskorištenih resursa.
Za pregled neiskorištenih slika pokrenite:
docker images -f dangling=true
Vidjet ćete slike koje nisu označene i koje ne koristi nijedan kontejner. Ovo su sigurni kandidati za uklanjanje.
Za uklanjanje neiskorištenih slika pokrenite:
docker image prune
Bit ćete upitani za potvrdu. Nakon potvrde, neiskorištene slike se brišu i prostor na disku se oslobađa.
Za uklanjanje svih neiskorištenih slika, ne samo onih koje vise:
docker image prune -a
Uklanjate sve slike koje ne koristi nijedan kontejner.
Važno: Ova naredba uklanja slike koje mogu biti potrebne kasnije. Osigurajte da nijedan potreban kontejner ne ovisi o njima.
Redovito čišćenje pomaže spriječiti probleme s prostorom na disku koji mogu uzrokovati neuspjeh kontejnera ili nepredvidivo ponašanje.
Verifikacija i testiranje
- Pokrenite
docker psi potvrdite da je status kontejnera ispravan. - Pokrenite
docker logsi provjerite jesu li greške identificirane ili riješene. - Pokrenite
docker inspecti potvrdite da status i izlazni kod odgovaraju očekivanjima. - Koristite
docker execkako biste potvrdili da procesi rade unutar kontejnera. - Ako je otklanjanje pogrešaka uspješno, kontejner bi trebao ostati u pokrenutom stanju bez kritičnih grešaka u logovima.
Vraćanje promjena
Ako ste napravili promjene tijekom otklanjanja pogrešaka, možete vratiti čisto stanje.
Izradite sigurnosnu kopiju važnih podataka prije uklanjanja kontejnera.
Zaustavite kontejner:
docker stop <CONTAINER_ID>
Vidjet ćete potvrdu da je kontejner zaustavljen.
Uklonite kontejner:
docker rm <CONTAINER_ID>
Vidjet ćete potvrdu da je kontejner uklonjen.
Ponovno stvorite kontejner:
docker run <OPTIONS> <IMAGE_NAME>
Novi kontejner je stvoren iz slike.
Važno: Uklanjanje kontejnera briše njegovo stanje izvođenja. Podaci se gube osim ako nisu pohranjeni u volumenima.
Otklanjanje pogrešaka
Kontejner se odmah isključuje
Provjerite docker logs za poruke o greškama. One obično objašnjavaju problem.
Ne možete pristupiti kontejneru
Osigurajte da je pokrenut koristeći docker ps.
Nema dostupnih logova
Osigurajte da aplikacija ispisuje izlaz na stdout ili stderr.
Kontejner se stalno ponovno pokreće
Provjerite politiku ponovnog pokretanja i logove kako biste identificirali petlje rušenja.
Visoka potrošnja resursa
Koristite docker stats za potvrdu skokova u CPU-u ili memoriji.
Zaključak
Naučili ste kako otkloniti pogreške u Docker kontejnerima provjerom njihovog statusa, analizom logova, pregledom konfiguracije i pristupom okruženju kontejnera. Ove tehnike omogućuju vam brzo identificiranje i rješavanje uobičajenih problema. Kao sljedeći korak, istražite otklanjanje pogrešaka u Docker Compose-u i centralizirane sustave za logiranje za upravljanje višestrukim kontejnerima.