wake-up-neo.com

So zeigen Sie Protokolle für ein Docker-Image an

In der Docker-Welt können Sie problemlos Protokolle für Docker-Container (dh ein laufendes Image) anzeigen. Bei der Image-Erstellung werden jedoch in der Regel mehrere Befehle ausgegeben. Zum Beispiel npm install-Befehle in Knotenprojekten. Es wäre von Vorteil, auch Protokolle für diese Befehle anzuzeigen. Ich habe schnell in der Dokumentation gesucht, aber nicht gefunden, wie man Protokolle für das Docker-Image abrufen kann. Ist es möglich?

13
Ville Miekk-oja

Die einfachste Methode ist die Verwendung von tee, um eine Kopie Ihrer gesamten Befehlsausgabe an eine Protokolldatei zu senden. Wenn Sie möchten, dass es an das Image angehängt wird, geben Sie Ihre Ausführungsbefehle in einer Protokolldatei im Image aus.

RUN my-install-cmd | tee /logs/my-install-cmd.log

Anschließend können Sie einen einmaligen Container ausführen, um den Inhalt der Protokolle anzuzeigen:

docker run --rm my-image cat /logs/my-install-cmd.log

Wenn Sie die an das Image angehängten Protokolle nicht benötigen, können Sie die Ausgabe jedes Builds mit einer einzigen Änderung an Ihrem Build-Befehl (anstelle vieler Änderungen an den Ausführungsbefehlen) genau so protokollieren, wie es JHarris sagt:

docker build -t my-image . | tee my-image.build.log

Wenn Sie ohne Verwendung von --rm=true Erstellen, verfügen Sie über alle Zwischencontainer, und jeder dieser Container verfügt über ein Protokoll, mit dem Sie überprüfen können

docker logs $container_id

Und vergessen Sie nicht, dass das Bild eine Historie der Ebenen enthält. Sie zeigen nicht die Ausgabe jedes Befehls an, aber es ist nützlich für alle Befehle, die keine Ausgabe protokollieren und wissen, aus welchem ​​Build die einzelnen Layer stammen, insbesondere wenn viel Caching verwendet wird.

docker history my-image
13
BMitch

Verwenden Sie Folgendes: https://github.com/jcalles/docker-wtee
Lesen Sie die Anweisungen und geben Sie mir Feedback.
Oder...
Wenn Sie Protokolle aus dem laufenden Container abrufen müssen und der Container über freigelegte Volumes verfügt, führen Sie Folgendes aus:

docker run --rm -it --name testlogs --link <CONTAINERNAME/ID> --network CONTAINERNETWORK -p PORT:8080 --volumes-from CONTAINERNAME/ID  javiercalles/wtee sh
0
Javier Calles