Samenvatting in 3 zinnen
- De consolelogs van Docker-containers worden als bestanden op de schijf van de host opgeslagen, niet in het systeemgeheugen.
- Het commando
docker logsleest deze opgeslagen bestanden en toont ze.- Om te voorkomen dat logbestanden oneindig groot worden, is het cruciaal om logrotatie-opties (
max-size,max-file) in te stellen.
1. Waar en hoe worden logs opgeslagen?
Docker vangt zowel de standaard uitvoer (stdout) als de standaard fout (stderr) stromen van containers op en verwerkt deze via een Logging Driver. Als er geen specifieke instellingen zijn geconfigureerd, gebruikt Docker standaard de json-file logging driver.
- Opslaglocatie: De logs van containers worden opgeslagen als JSON-bestanden op een specifieke locatie op het hostsysteem. De paden zijn doorgaans als volgt:
/var/lib/docker/containers/[컨테이너_ID]/[컨테이너_ID]-json.log
- Het commando
docker logs: Dit commando toont niet de inhoud die in het geheugen aanwezig is, maar leest de bovengenoemde JSON-logbestanden en geeft deze weer in de terminal.

2. Raakt de schijfruimte niet op als logs blijven accumuleren?
Ja, dat klopt. Als er geen maatregelen worden genomen, kunnen logbestanden blijven groeien en uiteindelijk de gehele schijfruimte van de host in beslag nemen. Om dit te voorkomen, biedt Docker logrotatie (Log Rotation) opties om de grootte en het aantal logbestanden te beperken.
U kunt bijvoorbeeld de volgende opties toevoegen wanneer u het commando docker run uitvoert:
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 maximale grootte van één logbestand tot 10MB.--log-opt max-file=3: Beperkt het maximale aantal logbestanden tot 3. Als er meer dan 3 bestanden zijn, wordt het oudste bestand verwijderd.
Met deze instelling zullen de logs van die specifieke container maximaal 30MB (10MB * 3 bestanden) aan schijfruimte in beslag nemen.
3. Instellen in het docker-compose.yml bestand
In Docker Compose kunt u de logging-opties eenvoudig per service instellen binnen het docker-compose.yml bestand.
U kunt het zien als de --log-opt vlag van het docker run commando, maar dan in YAML-formaat.
Hieronder vindt u een voorbeeld van het toepassen van logrotatie op een service genaamd my-app.
services:
my-app:
image: your-app-image
# ... andere instellingen ...
deploy:
resources:
limits:
memory: 512M
# 👇 Dit gedeelte is voor de loginstellingen.
logging:
driver: "json-file" # De te gebruiken logging driver (kan worden weggelaten, want dit is de standaardwaarde)
options:
max-size: "10m" # Maximale grootte per bestand: 10MB
max-file: "3" # Maximaal aantal bestanden: 3
logging: Dit is de sleutel die de logging-instellingen voor de betreffende service initieert.driver: Specificeert de te gebruiken logging driver.json-fileis de standaardwaarde.options: Configureert de opties die aan de driver moeten worden doorgegeven.max-size: Identiek aan--log-opt max-sizevandocker run.max-file: Identiek aan--log-opt max-filevandocker run.
Wanneer u deze service nu start met docker-compose up, zullen de logs van de my-app container automatisch roteren en maximaal 30MB (10MB * 3 bestanden) aan schijfruimte in beslag nemen.
4. Standaardinstellingen toepassen op alle containers
Als u het te omslachtig vindt om elke container afzonderlijk te configureren en u een standaardbeleid voor het hele systeem wilt toepassen, dan is het aanpassen van het Docker Daemon-configuratiebestand de beste methode.
- Open of maak het bestand
/etc/docker/daemon.json. (Als het bestand niet bestaat, maak het dan aan.) - Voeg de volgende inhoud toe:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
- Herstart de Docker-daemon.
sudo systemctl restart docker
Met deze configuratie zullen alle toekomstig gemaakte containers automatisch dit beleid volgen, tenzij er specifieke logging-instellingen zijn gedefinieerd. Uiteraard geldt dat als u afwijkende logging-opties specificeert voor een bepaalde container via het docker-compose.yml bestand of het docker run commando, deze individuele instellingen voorrang hebben boven de daemon-instellingen.
- Individuele service-instellingen: Configuratie in de
logging-sectie binnen hetdocker-compose.ymlbestand is de meest gebruikelijke en handige manier. - Globale standaardinstellingen: Om een uniform beleid toe te passen op alle containers van de server, wijzigt u het bestand
/etc/docker/daemon.json.