Docker konténer hálózati hibák keresése Wiresharkkal.

Docker konténerek hálózati hibáinak diagnosztizálása valós rendszerekben

Bevezetés

A Docker konténerek széleskörű elterjedése forradalmasította az alkalmazások fejlesztését és üzembe helyezését. Azonban a konténerizált környezetekben a hálózati problémák gyakran jelentkeznek, különösen valós, összetett rendszerekben. Amikor egy konténer nem tud csatlakozni egy másikhoz, nem érhető el kívülről, vagy váratlan késések jelentkeznek, a hálózati réteg gyakran a fő gyanúsított. Ebben a cikkben megvizsgáljuk a leggyakoribb Docker hálózati hibákat, és gyakorlati diagnosztikai technikákat mutatunk be a problémák gyors felderítésére.

A Docker hálózati architektúra alapjai

A konténerek hálózati problémáinak megértéséhez először meg kell értenünk, hogyan működik a Docker hálózatkezelés. Alapértelmezés szerint a Docker létrehoz egy virtuális hálózatot, amelyen keresztül a konténerek kommunikálnak. Minden konténer kap egy virtuális hálózati adaptert (veth), amely egy Linux hídhoz (docker0) kapcsolódik. A Docker több hálózati módot támogat:
  1. Bridge hálózat – alapértelmezett, izolált konténerek kommunikációjához.
  2. Host hálózat – a konténer közvetlenül a gazdagép hálózati névterét használja.
  3. Overlay hálózat – több Docker hoszt közötti kommunikációhoz.
  4. MACVLAN hálózat – saját MAC-címet rendel a konténerhez.

Gyakori hálózati hibák és diagnosztikájuk

Connection Refused hibák

Probléma

Egy konténer nem tud csatlakozni egy másik konténerhez vagy külső szolgáltatáshoz.

Diagnosztika

docker ps | grep <kontener_nev>

docker logs <kontener_id>

docker exec <kontener_id> ping <cel_ip>

docker exec <kontener_id> netstat -tulpn

Valós példa

Tegyük fel, hogy egy webalkalmazás konténer nem tud csatlakozni az adatbázis konténerhez. Első lépésként ellenőrizd, hogy az adatbázis konténer valóban fut-e, és figyel-e a megfelelő porton.

A konténer kívülről nem érhető el

Probléma

A konténer fut, de nem érhető el a gazdagépről vagy a hálózatról.

Diagnosztika

docker port <kontener_id>

docker network inspect <halozat_nev>

sudo iptables -L -n -v | grep DOCKER

telnet localhost <kulso_port>

Lehetséges okok

  • Hibás port mapping
  • Hiányzó port publikálás
  • Tűzfal blokkolás
  • Rossz hálózati konfiguráció

DNS feloldási problémák

Probléma

A konténerek nem tudják feloldani a domain neveket.

Diagnosztika

docker exec <kontener_id> cat /etc/resolv.conf

docker exec <kontener_id> nslookup google.com

docker exec <kontener_id> ping -c 2 8.8.8.8

cat /etc/docker/daemon.json

Gyakori okok

  • Hibás DNS szerver konfiguráció
  • Céges proxy vagy tűzfal
  • Overlay hálózati problémák
  • Docker daemon konfigurációs hibák

Fejlett diagnosztikai eszközök

Hálózati diagnosztikai image létrehozása

Sok minimális Docker image nem tartalmaz hálózati hibakereső eszközöket.

Példa Dockerfile

FROM alpine:latest

RUN apk add --no-cache \
    curl \
    net-tools \
    tcpdump \
    bind-tools

Használat

docker run -it --rm \
  --network container:<problemas_kontener> \
  diagnosztikai_image

Tcpdump használata

Forgalom rögzítése

docker run --rm \
  --net=host \
  -v $(pwd):/capture \
  nicolaka/netshoot

tcpdump -i any -w /capture/trace.pcap port 5432

Gazdagépről

tcpdump -i vethxxxxxx -nn -s0 -v port 80
A rögzített .pcap fájl később Wireshark segítségével elemezhető.

Valós rendszer esettanulmány

Helyzet

Egy mikroszolgáltatás-alapú rendszerben a rendeléskezelő szolgáltatás nem tudott kommunikálni a fizetési átjáró szolgáltatással. A rendszer Kubernetes környezetben futott, de a probléma alapvetően Docker hálózati konfigurációból eredt.

Diagnosztikai lépések

1. Konténerek állapotának ellenőrzése

Mindkét konténer megfelelően futott.

2. Kapcsolati tesztek

A rendeléskezelő konténerből nem lehetett elérni a fizetési szolgáltatást.

3. Hálózat vizsgálata

docker network inspect bridge
A vizsgálat során kiderült, hogy a két szolgáltatás külön alhálózatban működött.

4. Megoldás

  • Új Docker hálózat létrehozása
  • A szolgáltatások újracsatlakoztatása
  • Docker Compose konfiguráció javítása

Kiváltó ok

Egy hibás Docker Compose konfiguráció nem kapcsolta össze megfelelően a szolgáltatásokat.

Proaktív hálózati monitoring

A hálózati hibák megelőzése érdekében érdemes:
  1. Health check-eket használni minden szolgáltatásnál.
  2. Késést, csomagvesztést és sávszélességet monitorozni.
  3. Automatizált kommunikációs teszteket futtatni.
  4. Hálózati naplózást és auditálást alkalmazni.
  5. Riasztásokat beállítani szolgáltatás-kimaradások esetére.

Legfontosabb Docker hálózati parancsok

docker ps

docker logs <kontener_id>

docker exec -it <kontener_id> sh

docker network ls

docker network inspect <halozat>

docker port <kontener_id>

Összegzés

A Docker konténerek hálózati hibáinak diagnosztizálása rendszerszintű megközelítést igényel. Érdemes mindig az alapvető ellenőrzésekkel kezdeni – konténer állapot, portok, naplók –, majd fokozatosan haladni a mélyebb hálózati elemzések felé. A hálózati problémák gyakran több rétegben jelentkeznek egyszerre: alkalmazás, konténer, Docker hálózat, operációs rendszer vagy akár a fizikai infrastruktúra szintjén. A rendszeres hibakeresési rutinok, a megfelelő monitorozás és a dokumentált megoldások jelentősen csökkentik a kiesések idejét, és hosszú távon stabilabb konténeres infrastruktúrát eredményeznek.