2015-08-05 7 views
39

Ich verwende einen Container auf einer VM. Mein Container schreibt standardmäßig Protokolle in die Datei /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log, bis der Datenträger voll ist.Docker-Containerprotokolle, die meinen gesamten Speicherplatz belegen

Derzeit muss ich diese Datei manuell löschen, um zu vermeiden, dass die Festplatte voll ist. Ich habe gelesen, dass es in Docker 1.8 einen Parameter zu rotate the logs gibt. Was würden Sie als aktuelle Problemumgehung empfehlen?

+2

Als aktuelles Problem zu umgehen können Sie die Protokolle vollständig ausschalten, wenn es nicht ist von Bedeutung für dich. Dies kann durch Starten des Andock-Daemons mit '--log-driver = none' geschehen. Wenn Sie Protokolle nur für bestimmte Container deaktivieren möchten, können Sie sie mit '--log-driver = none' im Befehl' docker run' starten. Eine andere Option könnte sein, einen externen Speicher in '/ var/lib/docker 'einzubinden. Wie eine NFS-Freigabe oder etwas, das mehr Speicherkapazität als der betreffende Host hat. – Dharmit

+2

Oder verwenden Sie den 'journald'-Protokolltreiber, und kümmern sich journald um die Protokollrotation. – larsks

+0

@Dharmit Wo ist es auf CoreOs? – poiuytrez

Antwort

55

Docker 1.8 wurde mit einer Protokollrotationsoption freigegeben. Hinzufügen:

--log-opt max-size=50m 

Wenn der Container gestartet wird, macht den Trick. Sie erfahren mehr unter: https://docs.docker.com/engine/admin/logging/overview/

+0

Nur zu beachten, scheint dies nur für JSON und Fluentd-Protokolle verfügbar. – dman

+4

Nur ein kurzer Hinweis, dass das Versionierungsschema nach Docker 1.13 geändert wurde. Wenn Sie eine Versionsnummer wie "17.03.0-ce" haben, bedeutet dies, dass Sie das neue Versionierungsschema nach Version 1.13 verwenden. – tripleee

5

Achtung: Dieser Beitrag bezieht Versionen Andockfenster < 1.8 (die die --log-opt Option nicht haben)

Warum Sie nicht verwenden logrotate (die auch Kompression unterstützt)?

/var/lib/docker/containers/*/*-json.log { 
hourly 
rotate 48 
compress 
dateext 
copytruncate 
} 

konfigurieren sie entweder direkt auf dem CoreOs Knoten oder einen Behälter bereitstellen (z.B. https://github.com/tutumcloud/logrotate), die Halterungen/var/lib/Andockfensters die Protokolle zu drehen.

+5

Ich denke nicht, dass dies eine gute Lösung ist. Sie müssen den laufenden Dämon zurückwerfen, damit er nicht mehr in das alte Protokoll schreibt und mit dem Schreiben in das neue Protokoll beginnt. Andernfalls verweist der Linux-Kernel weiterhin auf die alte Protokolldatei im Speicher (im Gegensatz zur Festplatte). Logrotate kann dies mit normalen Dämonen tun, aber das Docken des Dockers oder des Containers verursacht Ausfallzeiten. – dman

+1

Guter Punkt, stimme ich zu. Diese Antwort wurde in den frühen Tagen von Docker (tm) bereitgestellt, während die eingebauten Funktionen (wie in der anderen Antwort erwähnt) die Aufgabe erfüllen sollten. – gtonic

+0

Dies hat einige Probleme, es rotiert Protokolle, aber immer noch Festplattenverbrauch zeigt ähnlich. Ich habe v5.0 benutzt.2 musste dann mit https://get.docker.com/ script auf den neuesten Stand gebracht werden, um die Option --log-opt mit dem Befehl docker create oder run zu verwenden. –

11

ACHTUNG: Dies ist für Docker-compose Version 2 nur

Beispiel:

version: '2' 
services: 
    db: 
    container_name: db 
    image: mysql:5.7 
    ports: 
     - 3306:3306 
    logging: 
     options: 
     max-size: 50m 
Verwandte Themen