Docker-Container-Protokolle löschen
- Erstellen Sie ein neues Projekt
- Definiere ein Bild
- Erstellen Sie ein Bild
- Führen Sie einen Container aus
- Überprüfen Sie die Containerprotokolle
- Überprüfen Sie die Containerprotokolle in der Protokolldatei
-
Löschen Sie Docker-Container-Protokolle mit dem Befehl
echo
-
Löschen Sie Docker-Container-Protokolle mit dem Befehl
truncate
- Löschen Sie Docker-Container-Protokolle mithilfe der Protokollrotation
- Abschluss
Protokolle sind Informationen, die von der Anwendung protokolliert werden, wenn ein bestimmtes Ereignis oder ein bestimmter Zustand eintritt, und sie helfen uns, die Anwendung zu überwachen und die erforderlichen Maßnahmen zu ergreifen.
Protokolle helfen uns beispielsweise zu wissen, ob der Anwendungsstatus aktiv oder inaktiv ist, wenn wir eine Anwendung in der Produktion bereitstellen. Wenn ein Fehler auftritt, können wir die Art des aufgetretenen Fehlers anhand der Protokolle identifizieren.
Mit diesen Informationen können wir die erforderlichen Änderungen vornehmen, um die Fehler zu beheben. In einer großen Anwendung, die von vielen Personen verwendet wird, kann es schwierig sein, die Protokolle zu verwalten, aber wenn wir Docker verwenden, können wir die Protokolle einfach verwalten, da es Funktionen bietet, die helfen, die Protokolle zu manipulieren.
Docker bietet Befehle wie --details
, --since
, --tail
, --timestamps
und --until
, mit denen wir die Protokolle manipulieren können. Standardmäßig speichert Docker Protokolle im JSON-Format im Ordner /var/lib/docker/containers/
, aber beachten Sie, dass wir Images erstellen und ihre Container als root
-Benutzer ausführen müssen, damit die Datei mit den zu erstellenden Protokollen erstellt wird .
Geschieht dies ohne Benutzerrechte root
, erhalten wir den Fehler Datei oder Verzeichnis nicht gefunden
. In diesem Tutorial lernen wir die verschiedenen Ansätze kennen, die wir nutzen können, um die Protokolle aus der Datei */*-json.log
zu löschen.
Erstellen Sie ein neues Projekt
Öffnen Sie WebStorm IDEA und wählen Sie Datei > Neu > Projekt
. Wählen Sie im geöffneten Fenster Node.js und ändern Sie den Projektnamen von unbenannt
in docker-logs-clear
oder verwenden Sie einen beliebigen Namen.
Drücken Sie abschließend die Schaltfläche Erstellen
, um das Projekt zu generieren.
Erstellen Sie eine Datei index.js
im Ordner docker-logs-clear
und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
console.log('This is an express application')
console.error('An error occurred')
throw new Error('An exception occurred')
Diese Datei erstellt eine STDOUT
-Meldung und zwei STDERR
-Meldungen, die der Protokolldatei hinzugefügt werden, wenn wir die Anwendung ausführen. Wir können diesen Code in eine Webanwendung ändern, aber beachten Sie, dass nur die Meldungen STDOUT
und STDERR
zur Protokolldatei hinzugefügt werden.
Definiere ein Bild
Erstellen Sie eine Datei Dockerfile
im Ordner docker-logs-clear
und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.
FROM node:18-alpine
WORKDIR /com/app
ADD package*.json ./
RUN npm install
ADD . .
CMD node index.js
Hier legt FROM
das Basisbild fest, auf dem unser benutzerdefiniertes Bild mit nachfolgenden Anweisungen erstellt wird. In diesem Fall haben wir alpine
verwendet, um ein einfaches Image von Node als Basisimage zu verwenden.
Die Docker-Dokumentation enthält eine ausführliche Dockerfile-Referenz, in der wir mehr über die anderen Anweisungen erfahren können.
Erstellen Sie ein Bild
Beachten Sie, dass diese Phase als Root-Benutzer ausgeführt werden muss. Öffnen Sie dazu ein neues Terminalfenster mit der Tastenkombination auf Ihrem Computer und führen Sie den folgenden Befehl aus, um den aktuellen Benutzer in den Root-Benutzer zu ändern.
david@david-HP-ProBook-6470b:~/WebstormProjects/docker-logs-clear$ sudo su
Ausgang:
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear#
Stellen Sie sicher, dass Sie das Verzeichnis cd
in den Speicherort Ihres Projekts ändern, wie oben gezeigt, um das Image erstellen zu können. Sobald wir Zugriff auf den Root-Benutzer haben, führen Sie den folgenden Befehl aus, um ein Image mit dem Tag docker-logs:latest
zu erstellen.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker build --tag docker-logs:latest .
Dieser Befehl führt unser Dockerfile
aus, und wir können die ausgeführten Anweisungen im Terminalfenster wie unten gezeigt anzeigen.
Step 1/6 : FROM node:18-alpine
18-alpine: Pulling from library/node
213ec9aee27d: Already exists
f379b689aea3: Pull complete
fe299d5780c0: Pull complete
c34a027bbf26: Pull complete
Digest: sha256:f829c27f4f7059609e650023586726a126db25aded0c401e836cb81ab63475ff
Status: Downloaded newer image for node:18-alpine
---> 867dce98a500
Step 2/6 : WORKDIR /com/app
---> Running in 3b215b9ad992
Removing intermediate container 3b215b9ad992
---> aba9cfa2472b
Step 3/6 : ADD package*.json ./
---> 6243ccacf178
Step 4/6 : RUN npm install
---> Running in 9b90745b171e
added 57 packages, and audited 58 packages in 9s
7 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Removing intermediate container 9b90745b171e
---> e73c696d9743
Step 5/6 : ADD . .
---> e5235f761af0
Step 6/6 : CMD node index.js
---> Running in 7a857eea0a06
Removing intermediate container 7a857eea0a06
---> 29a367a3be2d
Successfully built 29a367a3be2d
Successfully tagged docker-logs:latest
Führen Sie einen Container aus
Um einen Container mit dem Image docker-logs
auszuführen, führen Sie den folgenden Befehl aus, der einen Container namens docker-logs-prod
ausführt. Beachten Sie, dass keine Ports verfügbar gemacht werden, da es sich nicht um eine Webanwendung handelt.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker run -d --name docker-logs-prod docker-logs:latest
Überprüfen Sie die Containerprotokolle
Das Ausführen des Containers führt den Code in unserer Anwendung aus. Führen Sie den folgenden Befehl aus, um die vom Container als Ergebnis der Meldungen STDOUT
und STDERR
generierten Protokolle anzuzeigen.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker logs -f docker-logs-prod
Ausgang:
This is an express application
An error occurred
/com/app/index.js:3
throw new Error("An exception occurred")
^
Error: An exception occurred
at Object.<anonymous> (/com/app/index.js:3:7)
at Module._compile (node:internal/modules/cjs/loader:1149:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)
at Module.load (node:internal/modules/cjs/loader:1027:32)
at Module._load (node:internal/modules/cjs/loader:868:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Node.js v18.10.0
Überprüfen Sie die Containerprotokolle in der Protokolldatei
Um zu überprüfen, ob die vorherigen Protokolle zu unserer Protokolldatei hinzugefügt wurden, verwenden Sie den folgenden Befehl, um den Speicherort der Protokolldatei zu überprüfen, an dem der Container die generierten Protokolle speichert.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker inspect --format='{{.LogPath}}' docker-logs-prod
Ausgang:
/var/lib/docker/containers/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da-json.log
Nachdem wir nun den Speicherort haben, an dem die Protokolldatei erstellt wird, führen Sie den folgenden Befehl aus, um den JSON-Inhalt der Protokolldatei zu drucken.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# cat /var/lib/docker/containers/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da-json.log
Ausgang:
{"log":"This is an express application\n","stream":"stdout","time":"2022-10-07T10:47:16.594937015Z"}
{"log":"An error occurred\n","stream":"stderr","time":"2022-10-07T10:47:16.596273395Z"}
{"log":"/com/app/index.js:3\n","stream":"stderr","time":"2022-10-07T10:47:16.617728515Z"}
{"log":"throw new Error(\"An exception occurred\")\n","stream":"stderr","time":"2022-10-07T10:47:16.61780931Z"}
{"log":"^\n","stream":"stderr","time":"2022-10-07T10:47:16.617822419Z"}
{"log":"\n","stream":"stderr","time":"2022-10-07T10:47:16.617832094Z"}
{"log":"Error: An exception occurred\n","stream":"stderr","time":"2022-10-07T10:47:16.617846368Z"}
{"log":" at Object.\u003canonymous\u003e (/com/app/index.js:3:7)\n","stream":"stderr","time":"2022-10-07T10:47:16.617855581Z"}
{"log":" at Module._compile (node:internal/modules/cjs/loader:1149:14)\n","stream":"stderr","time":"2022-10-07T10:47:16.617864838Z"}
{"log":" at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)\n","stream":"stderr","time":"2022-10-07T10:47:16.617882182Z"}
{"log":" at Module.load (node:internal/modules/cjs/loader:1027:32)\n","stream":"stderr","time":"2022-10-07T10:47:16.617890043Z"}
{"log":" at Module._load (node:internal/modules/cjs/loader:868:12)\n","stream":"stderr","time":"2022-10-07T10:47:16.617898124Z"}
{"log":" at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)\n","stream":"stderr","time":"2022-10-07T10:47:16.617906808Z"}
{"log":" at node:internal/main/run_main_module:23:47\n","stream":"stderr","time":"2022-10-07T10:47:16.617914665Z"}
{"log":"\n","stream":"stderr","time":"2022-10-07T10:47:16.61792284Z"}
{"log":"Node.js v18.10.0\n","stream":"stderr","time":"2022-10-07T10:47:16.617930182Z"}
Aus dem von der Datei zurückgegebenen JSON-Inhalt können wir alle vom Container generierten Protokolle sehen, einschließlich des Streams
und der Zeit
, zu der das Ereignis aufgetreten ist. Im nächsten Abschnitt erfahren Sie, wie Sie Protokolle aus dieser Datei löschen.
Löschen Sie Docker-Container-Protokolle mit dem Befehl echo
Um den JSON-Inhalt aus der Protokolldatei zu löschen, führen Sie den folgenden Befehl aus, der den Befehl echo
verwendet, um die Datei mit einer leeren Zeichenfolge zu überschreiben.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# echo "" > $(docker inspect --format='{{.LogPath}}' docker-logs-prod)
Um zu überprüfen, ob unsere Protokolldatei gelöscht wurde, führen Sie den Befehl docker logs -f docker-logs-prod
aus und beachten Sie, dass er keine Protokolle aus der Datei zurückgibt.
Löschen Sie Docker-Container-Protokolle mit dem Befehl truncate
Führen Sie den vorherigen Container erneut aus, um die Protokolle erneut zu generieren, und führen Sie den folgenden Befehl aus, um die zur Protokolldatei hinzugefügten Protokolle zu löschen. Dieser schrumpft die Datei mit dem Befehl truncate
auf die Grösse 0
.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# truncate -s 0 $(docker inspect --format='{{.LogPath}}' docker-logs-prod)
Um zu überprüfen, ob unsere Protokolldatei gelöscht wurde, führen Sie den Befehl docker logs -f docker-logs-prod
aus und beachten Sie, dass er keine Protokolle aus der Datei zurückgibt.
Löschen Sie Docker-Container-Protokolle mithilfe der Protokollrotation
In den beiden vorherigen Beispielen haben wir die Befehle echo
und truncate
verwendet, um den Inhalt der Protokolldatei manuell zu löschen. Diese Ansätze werden nicht empfohlen, da sie das Docker-Protokollierungssystem beeinträchtigen und unerwartetes Verhalten verursachen können.
Die empfohlene Methode zum Löschen von Protokollen aus den Containern ist die Verwendung der Protokollrotation. Um die Log-Rotation mit dem Standard-Logging-Treiber json-file
zu verwenden, können wir max-size
und max-file
der Log-Datei in der Datei namens daemon.json
einstellen, die sich unter /etc/docker/
Ordner, wie unten gezeigt.
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Dies sollte mit root
-Benutzerrechten erfolgen. Damit die Änderungen wirksam werden, müssen wir Docker mit dem Befehl systemctl reload docker
neu laden.
Wenn wir die Protokollrotation für einzelne Container angeben möchten, können wir die Datei --log-driver json-file
, --log-opt max-size=10m
und --log-opt max-file=3
Optionen beim Ausführen des Containers.
Abschluss
In diesem Tutorial haben wir verschiedene Ansätze kennengelernt, mit denen wir Protokolle aus Docker-Containern löschen können, indem wir den JSON-Inhalt löschen, der den Protokolldateien hinzugefügt wurde. Die Ansätze, die wir in diesem Tutorial behandelt haben, umfassen die Verwendung des Befehls echo
, des Befehls truncate
und der log-rotation
.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub