docker logs toont geen logs die voortdurend in het systeemgeheugen worden opgeslagen. In plaats daarvan worden ze standaard op de schijf van het host systeem als bestanden opgeslagen.
Waar en hoe worden logs opgeslagen? ⚙️
Docker vangt zowel de standaarduitvoer (stdout) als de standaardfout (stderr) van de container en behandelt deze via de logging driver. Tenzij speciaal ingesteld, gebruikt Docker standaard de json-file logging driver.
-
Opslaglocatie: De logs van de container worden als JSON-bestanden opgeslagen op een specifieke locatie op het host systeem. Gewoonlijk is het pad als volgt.
/var/lib/docker/containers/[container_ID]/[container_ID]-json.log
-
docker logscommando: Dit commando toont niet de inhoud in het geheugen, maar leest en toont de genoemde JSON-logbestanden in de terminal.
Vertraagt het schijfruimte als logs zich opstapelen? 🤔
Ja, dat klopt. Als er geen actie wordt ondernomen, kunnen de logbestanden blijven groeien en de gehele schijfruimte van de host opvullen. Om dit te voorkomen, biedt Docker de optie voor log rotatie om de grootte en het aantal logbestanden te beperken.
Bijvoorbeeld, bij het uitvoeren van het docker run commando, kunt u de volgende opties toevoegen.
docker run -d \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx
-
--log-opt max-size=10m: Beperkt de grootte van één logbestand tot 10MB. -
--log-opt max-file=3: Beperkt het aantal logbestanden tot 3. Zodra het aantal boven de 3 komt, worden de oudste bestanden verwijderd.
Met deze instellingen zal de log van de container maximaal 30MB (10MB * 3) schijfruimte gebruiken.
Conclusie 📝
-
De console logs van Docker containers worden op de schijf van de host als bestanden opgeslagen, niet in het systeemgeheugen.
-
Het
docker logscommando heeft de functie om deze opgeslagen bestanden te lezen en weer te geven. -
Om te voorkomen dat logbestanden onbeperkt groeien, is het instellen van logrotatie-opties (
max-size,max-file) erg belangrijk.
In Docker Compose kunt u de logging-opties heel eenvoudig instellen in het docker-compose.yml bestand voor elke service.
U kunt het beschouwen alsof de --log-opt vlag van het docker run commando in YAML-formaat gaat.
Instellen in het docker-compose.yml bestand 📝
Hieronder ziet u een voorbeeld van het toepassen van log rotatie voor een service genaamd my-app.
services:
my-app:
image: your-app-image
# ... andere instellingen ...
deploy:
resources:
limits:
memory: 512M
# 👇 Dit deel is de loginstelling.
logging:
driver: "json-file" # De logging driver die gebruikt zal worden (standaard, dus kan weggelaten worden)
options:
max-size: "10m" # Maximale grootte per bestand: 10MB
max-file: "3" # Maximale aantal bestanden: 3
-
logging: Dit is de sleutel die de loginstellingen voor de betreffende service start. -
driver: Specificeert de logging driver die gebruikt zal worden. De standaard isjson-file. -
options: Stelt de opties in die aan de driver doorgegeven moeten worden.-
max-size: Vergelijkbaar metdocker run’s--log-opt max-size. -
max-file: Vergelijkbaar metdocker run’s--log-opt max-file.
-
Wanneer u nu de service met docker-compose up start, zullen de logs van de my-app container automatisch worden geroteerd en slechts maximaal 30MB (10MB * 3) schijfruimte gebruiken.
Standaardinstellingen voor alle containers 🌍
Als het te veel moeite kost om handmatig opties voor alle containers in te voeren en u een beleid voor het hele systeem wilt toepassen, is het het beste om het Docker daemon configuratiebestand aan te passen.
-
Open of maak het
/etc/docker/daemon.jsonbestand. (Maak een nieuw bestand aan als het nog niet bestaat.) -
Schrijf de inhoud zoals hieronder.
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Herstart de Docker daemon.
sudo systemctl restart docker
Met deze instelling zullen alle nieuw aangemaakte containers voortaan automatisch deze policy volgen, tenzij er specifieke logging-instellingen worden opgegeven in het docker-compose.yml bestand of het docker run commando, waarbij individuele instellingen voorrang hebben op de daemon-instellingen.
Samenvatting
-
Individuele service-instellingen: Het instellen van de
loggingsectie binnen hetdocker-compose.ymlbestand is het meest gebruikelijk en handig. -
Globale standaardinstellingen: Als u een uniforme policy voor alle containers op de server wilt toepassen, bewerk dan het
/etc/docker/daemon.jsonbestand.
댓글이 없습니다.