Waar bewaart Docker logbestanden?

0
147

Debuggen van de meeste Linux-programma's omvat meestal het controleren van logbestanden, wat een complexe Verwerken. Als je echter in een containeromgeving onder Docker draait, moet je meer specifieke tools gebruiken om fouten in apps in productie op te sporen.

Waar worden logs opgeslagen ?

Het simpele antwoord is dat Docker containerlogboeken opslaat op de hoofdopslaglocatie, /var/lib/docker/. Elke container heeft een logboek dat specifiek is voor hun ID (de volledige ID, niet de verkorte die gewoonlijk wordt weergegeven) en u kunt deze als volgt openen:

/var/lib/docker/containers/ID/ID -json.log

Dat is waar ze zijn opgeslagen, maar aangezien ze in een JSON-indeling zijn, zijn ze niet gemakkelijk leesbaar, en het gebruik van de volledige container-ID is vervelend. Docker biedt een ingebouwd commando om ze te bekijken:

docker logs -f e4bd48ef3103

Hier houdt de vlag -f de prompt open en “follow” eventuele nieuwe vermeldingen in het bestand. Je kunt ook –tail het bestand gebruiken, of –timestamps gebruiken om de logtijd weer te geven, of –until en –sinsce gebruiken om te filteren op basis van tijd.

Als je Docker gebruikt Compose, je kunt de log-opdracht daarvan gebruiken om alle logs gemakkelijk te bekijken:

docker-compose logs Advertisement

Een ding dat u echter opvalt, is dat dit STDOUT en STDERR zijn, wat voor veel dingen handig is, maar u alleen de console-uitvoer laat zien van het ingangspunt gespecificeerd door “CMD” in het Docker-bestand. Veel apps hebben hun eigen speciale logsystemen, die vaak loggen in bestanden zoals /var/log/nginx/access.log. Toegang tot dergelijke logs is nog steeds mogelijk vanaf de hostzijde via Docker.

Logboeken bekijken van apps in containers

Afhankelijk van de container is dit misschien niet nodig. De standaard NGINX-container is bijvoorbeeld ingesteld om de Docker-logboeken naar STDOUT te verzenden om het controleren van logboeken gemakkelijker te maken. Het doet dit met een symbolische link van /dev/stdout naar het logbestand, en je kunt iets soortgelijks instellen voor je containers.

RUN ln -sf /dev/stdout /var/log/nginx/access.log &amp ;& ln -sf /dev/stderr /var/log/nginx/error.log

Maar als u specifieke bestanden in een container wilt uitchecken, kunt u dat doen. Docker biedt het exec -it-commando waarmee u elk commando kunt uitvoeren binnen elk lopend Docker-proces. Hiermee kunt u een logbestand in een Docker-container volgen:

docker exec -it e4bd48ef3103 tail -f log.txt

Omdat je hiermee elk commando kunt uitvoeren, kun je journalctl of elke andere foutopsporingsstrategie gebruiken die je wilt, zolang je het vooraf laat gaan met docker exec -it. Je kunt zelfs /bin/bash uitvoeren als je erin wilt springen en rondneuzen.

Een meer permanente oplossing die prettiger speelt bij hostservices, is het gebruik van een Docker-volumekoppeling. U kunt een map zoals /var/log/nginx binden aan een volume dat zichtbaar is vanaf de host. Maak eerst een nieuw volume:

docker-volume creëer nginx-logs

En voer de container uit met de –mount:

docker run -d –name devtest –mount source=nginx-logs,target=/var/log/nginx nginx:latest

Als je Docker Compose gebruikt, kan het proces worden geautomatiseerd:

versie: '3.0'-services: web: afbeelding: nginx:laatste poorten: – '80:80' volumes: – nginx-logs:/var/log/nginx/volumes: nginx-logs: advertentie

Op deze manier kunnen logbestanden direct worden opgenomen door alle logaggregatieservices op de hostcomputer.

Docker Daemon-logboeken bekijken

< p>Als u in plaats daarvan logboeken wilt bekijken die specifiek zijn voor de algehele Docker-service op uw server, en niet voor een specifieke gecontaineriseerde app, wilt u de journalctl-logboeken bekijken:

sudo journalctl -fu docker.service < p>Hier wordt het op de meeste systemen opgeslagen, maar op sommige bevindt het zich op een andere plek:

  • Amazon Linux: /var/log/docker
  • CentOS/RHEL: /var/log/messages | grep docker
  • macOS: ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
  • Windows: AppDataRoamingDockerlogvm dockerd.log