Erstens verwende ich Docker 1.1.2 sowohl für den Client als auch für den Server. Diese Antwort ist möglicherweise für neuere Docker-Versionen veraltet, da sich Docker schnell weiterentwickelt.
Speicherort der Datei
Finden Sie Ihr Docker-Verzeichnis. Auf Systemen, die ein System im apt / debian-Stil verwenden, wird das vom Docker-Repository installierte Paket https://get.docker.com/ubuntu
verwendet /var/lib/docker
. Möglicherweise befindet sich das Verzeichnis auf anderen Systemen am selben Ort (kann nicht bestätigt werden).
unter containers/**CONTAINER_ID**
finden sie infos zum container. In der Datei **CONTAINER_ID**-json.log
in diesem Ordner finden Sie eine Datei mit allen Protokollen für diesen Container. Es kann aussehen wie eine JSON-Datei, ist es nicht. Es ist eine Flow-A-Json-Struktur, eine pro Zeile, die jeweils eine Protokollzeile enthält (jede Zeile endet mit einem }
und die nächste beginnt mit einem {
, daher ist sie insgesamt kein gültiger Json).
Beispiel Ort: - /var/lib/docker/containers/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6/05b6053c41a2130afd6fc3b158bda4e605b6053c41a2130afd6fc3b158bda4e6-json.log
Bearbeiten / Ändern dieser Datei
Ich schlage vor, dass Sie diesen Pfad verwenden, um zu sehen, ob es der Grund ist, warum Ihnen der Speicherplatz ausgeht, aber nicht, um sie zu drehen.
Ich möchte lieber sicherstellen, dass der Container nicht zu viele Zeilen protokolliert (indem Sie eine CMD in der Docking-Datei verwenden, die die Ausgabe Ihres Prozesses entweder in eine Datei in einem Volume oder nach / dev / null umleitet - mit Protokollen, die mit der Konfiguration aktiviert wurden - und Ich würde dann die Protokolldateien mit einem anderen Container logrotieren.)
docker inspect
ist dein Freund.docker inspect --format='{{.LogPath}}' $INSTANCE_ID
docker-machine
Hier ein einfacher Einzeiler zum Reinigen der Container-Protokolldatei:
echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
quelle
docker-machine ssh default "echo '' | sudo tee $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)"
docker logs
ist immer leer ...docker inspect --format='{{.LogPath}}' <container_name_or_id>
nützlich. Vielen Dank!Wenn Sie ausführen
sudo lsof | grep '(deleted)'
, werden Sie möglicherweise feststellen, dass viele gelöschte Container-Protokolldateien vom Docker noch geöffnet sindDies sind Protokolle, die zu einem gelöschten Container gehören. Eine Möglichkeit, diese zu schließen, besteht darin, den Docker-Daemon selbst neu zu starten. Dies ist nicht immer machbar.
Eine andere Möglichkeit, diesen Speicherplatz freizugeben, besteht darin, den entsprechenden Dateideskriptor zu finden und ihn zu kürzen:
Wo
17511
ist die PID von Docker unde49d81fc
ist Teil des fehlerhaften Protokolldateinamens / der Container-ID. Hier ist der fd / proc / 17511 / fd / 25, also kürzen wir ihn:quelle
: > /proc/17511/fd/25
Ich verwende Docker Version 1.13.0, Build 49bf474
Wenn Sie das Standardprotokollierungsformat verwenden
json-file
, können Sie die Option zum Drehen Ihrer Protokolle angeben.Sie können den Docker-Daemon dafür einrichten oder ihn pro Container einrichten.
Beispiel: Protokolldateigröße von 2 MB und maximal 5 Protokolldateien:
Docker-Daemon: Datei erstellen
/etc/docker/daemon.json
:Docker-Lauf:
Einzelheiten finden Sie unter Protokollierung und Dockerd-Konfiguration
quelle
Eine späte Antwort, aber jeder im selben Boot ist möglicherweise besser dran, nach Möglichkeiten zu suchen, um seine Docker-Protokolle an einen Ort zu exportieren, an dem sie verwaltet werden können. logspout ist nützlich, um Protokolle aus all Ihren Docker-Containern zu sammeln und an einen anderen Ort zu senden. Wenn Sie dies nur berücksichtigen müssen, ist es möglicherweise eine gute Methode, sie an den Syslog-Daemon des Hosts zu senden, und Sie können die üblichen Mechanismen verwenden, um sie in Dateien zu ordnen und von dort aus zu drehen. Bei größeren Umgebungen mit mehreren Hosts sollten Sie sich die Lieferung an einen "ELK" -Stapel ansehen. dh Elasticsearch, Logstash und Kibana.
quelle
Um den Docker-Standort zu finden, können Sie Folgendes verwenden:
Wenn Sie Speicherplatz freigeben möchten, können Sie folgendermaßen vorgehen:
Jetzt können Sie einen Container löschen mit:
quelle
Sah dieses Skript in der offiziellen Docker-Dokumentation:
Funktioniert gut, aber Docker gibt den Speicher nicht automatisch frei ... Das Skript löscht nur die Protokolldateien.
quelle