Wie würde ich vorgehen, um eine Anwendung auf meinem Host-Computer zu starten, um Dateien und Standarddaten aus einem laufenden Docker-Container zu lesen?
Im Wesentlichen möchte ich dies tun:
docker start containerid
./myapp // This app will *somehow* have access files and stdout generated by the container I just stared.
Wie würde ich das machen? Genauer gesagt, wohin ich damit gehen möchte; Ich möchte die Protokolle und die Standardausgabe eines Docker-Containers lesen und diese Protokolle an einer anderen Stelle verarbeiten lassen.
Ich bin auch bereit, einen anderen Docker-Container zu erstellen, der Dateien und Standarddaten aus einem anderen Container lesen kann, aber ich weiß nicht, ob dies möglich ist.
-f
Option existiert schon sehr lange ( jedenfalls in der Zeitskala des Dockers ). Mindestens 7 Monate gemäß dieser Ausgabe: github.com/dotcloud/docker/issues/2997docker logs
Befehl an eine Datei weiterleiten, um diese Datei zu überwachen, oder dies direkt im Container tun und die Protokolldatei als Volume verfügbar machen .Um die Standardausgabe anzuzeigen, können Sie den Docker-Container mit starten
-i
. Dies ermöglicht es Ihnen natürlich nicht, den gestarteten Prozess zu verlassen und den Container zu erkunden.Alternativ können Sie das Dateisystem des Containers unter anzeigen
/var/lib/docker/containers/containerid/root/
Doch weder von diesen sind ideal. Wenn Sie Protokolle oder dauerhaften Speicher anzeigen möchten, sollten Sie bei Verwendung ein Volume an den
-v
Switch anhängendocker run
. Dies würde bedeuten, dass Sie Protokolldateien entweder auf dem Host überprüfen oder an einen anderen Container anhängen und dort überprüfen können.quelle
Ein bisschen spät, aber damit mache ich es
journald
. Es ist ziemlich mächtig.Sie müssen Ihre Docker-Container auf einem Betriebssystem mit ausführen
systemd-journald
.docker run -d --log-driver=journald myapp
Dies leitet die ganze Menge in den Journald des Hosts ein, der sich um Dinge wie das Bereinigen von Protokollen, das Speicherformat usw. kümmert und Ihnen einige coole Optionen zum Anzeigen bietet:
journalctl CONTAINER_NAME=myapp -f
welches es Ihrer Konsole zuführt, wenn es protokolliert wird,
journalctl CONTAINER_NAME=myapp > output.log
das gibt Ihnen die ganze Menge in einer Datei zum Mitnehmen, oder
journalctl CONTAINER_NAME=myapp --since=17:45
Außerdem können Sie die Protokolle weiterhin über
docker logs ....
anzeigen, wenn Sie dies bevorzugen.Nicht mehr
> my.log
oder-v "/apps/myapp/logs:/logs"
etc.quelle
Das Teilen von Dateien zwischen einem Docker-Container und dem Host-System oder zwischen separaten Containern erfolgt am besten mithilfe von Volumes .
Die Ausführung Ihrer App in einem anderen Container ist wahrscheinlich die beste Lösung, da dadurch sichergestellt wird, dass Ihre gesamte Anwendung gut isoliert und einfach bereitgestellt werden kann. Was Sie versuchen, klingt sehr ähnlich zu dem in diesem ausgezeichneten Blog-Beitrag beschriebenen Setup. Schauen Sie mal rein!
quelle
Sie können das Dateisystem des Containers unter anzeigen
/var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/
und du kannst einfach
quelle