GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Kde Docker uchovává soubory protokolu?

Ladění většiny linuxových programů obvykle zahrnuje kontrolu souborů protokolu, což může být složitý proces. Pokud však běžíte v kontejnerovém prostředí pod Dockerem, budete muset k ladění aplikací v produkci používat specifičtější nástroje.

Kde jsou protokoly uloženy?

Jednoduchá odpověď je, že Docker ukládá protokoly kontejneru do svého hlavního úložiště, /var/lib/docker/ . Každý kontejner má protokol specifický pro jeho ID (úplné ID, nikoli zkrácené, které se obvykle zobrazuje) a můžete k němu přistupovat takto:

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

To je kde jsou uloženy, ale protože jsou ve formátu JSON, nejsou snadno čitelné a nutnost používat úplné ID kontejneru je otravné. Docker poskytuje vestavěný příkaz pro jejich zobrazení:

docker logs -f e4bd48ef3103

Zde je -f flag ponechá výzvu otevřenou a „sleduje“ všechny nové položky v souboru. Můžete také --tail soubor, nebo použijte --timestamps pro zobrazení času záznamu nebo použijte --until--since filtrovat podle času.

Pokud používáte Docker Compose, můžete pomocí příkazu log z něj snadno zobrazit všechny protokoly:

docker-compose logs

Jedna věc, kterou si všimnete, je, že se jedná o STDOUT a STDERR, které jsou užitečné pro spoustu věcí, ale zobrazují vám pouze výstup konzoly vstupního bodu určeného „CMD“ v souboru Docker. Mnoho aplikací má své vlastní vyhrazené systémy protokolování, které se často přihlašují do souborů jako /var/log/nginx/access.log . Přístup k protokolům, jako je tento, je stále možný ze strany hostitele prostřednictvím Dockeru.

Zobrazení protokolů z aplikací uvnitř kontejnerů

V závislosti na kontejneru to nemusí být nutné. Například výchozí kontejner NGINX je nastaven tak, aby odesílal své protokoly Docker do STDOUT, aby se usnadnila kontrola protokolů. Dělá to pomocí symbolického odkazu z /dev/stdout do souboru protokolu a něco podobného můžete nastavit pro své kontejnery.

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

Pokud však chcete zkontrolovat konkrétní soubory v kontejneru, můžete tak učinit. Docker poskytuje exec -it příkaz, který vám umožní spustit jakýkoli příkaz uvnitř jakéhokoli běžícího procesu Docker. Pomocí tohoto můžete uložit soubor protokolu uvnitř kontejneru Docker:

docker exec -it e4bd48ef3103 tail -f log.txt

Protože to umožňuje spustit jakýkoli příkaz, můžete použít journalctl nebo jakékoli jiné ladicí strategie, které chcete, pokud před nimi uvedete docker exec -it . Můžete dokonce spustit /bin/bash pokud chcete naskočit a šťourat se.

Trvalejším řešením, které si lépe pohrává s hostitelskými službami, je použití připojení svazku Docker. Můžete svázat adresář jako /var/log/nginx do svazku, který je viditelný z hostitele. Nejprve vytvořte nový svazek:

docker volume create nginx-logs

A spusťte kontejner pomocí --mount :

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

Pokud používáte Docker Compose, proces může být automatizován:

version: "3.0"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - nginx-logs:/var/log/nginx/
volumes:
  nginx-logs:

Tímto způsobem budou soubory protokolu přímo zpracovatelné všemi službami agregace protokolů na hostitelském počítači.

Zobrazení protokolů démona Docker

Pokud místo toho chcete zobrazit protokoly specifické pro celkovou službu Docker na vašem serveru, a ne pro konkrétní kontejnerovou aplikaci, budete chtít zobrazit journalctl protokoly:

sudo journalctl -fu docker.service

Zde je uložen ve většině systémů, ale v některých je na jiném místě:

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

Docker
  1. Příkaz k vyčištění starých souborů protokolu?

  2. Jak změnit cestu protokolu auditu v MySQL Docker

  3. Kde najít soubory protokolu přihlášení SSH na centos

  1. Jak přehrávat soubory .swf?

  2. Kde se soubory vína ukládají?

  3. Soubory protokolu Linux

  1. Velikost obrázku dockeru – jak jej udržet na malém rozměru?

  2. Kde Linux Mint uchovává soubory pro výchozí tapety plochy?

  3. Kam příkaz make install umístí soubory?