Comment faire pour lire les fichiers et stdout de l'exécution d'un conteneur Docker
Comment pourrais-je aller sur le démarrage d'une application dans mon ordinateur hôte afin de lire des fichiers et stdout de l'exécution d'un conteneur docker?
Essentiellement, je veux le faire:
docker start containerid
./myapp //This app will *somehow* have access files and stdout generated by the container I just stared.
Comment pourrais-je aller sur le faire? Pour être plus précis, où je suis en train d'aller avec cela; je veux lire les journaux et la sortie standard d'un conteneur docker et ont de ces journaux traitées ailleurs.
Je suis également disposé à créer un autre conteneur docker qui permet de lire des fichiers et stdout à partir d'un autre conteneur, mais je ne sais pas si c'est possible.
Vous devez vous connecter pour publier un commentaire.
La stdout du processus entamé par le conteneur docker est disponible par le biais de la
menu fixe les journaux
commande (utiliser-f
pour le garder à jamais). Une autre option serait de diffuser les journaux directement par le biais de la docker API à distance.Pour accéder aux fichiers journaux (uniquement si vous devez, considérer la journalisation sur la sortie standard ou d'autres solution standard comme syslogd) votre seule véritable option est de configurer un volume (comme Marcus Hughes suggère) si les journaux sont stockés à l'extérieur du récipient et disponibles pour le traitement de l'hôte ou un autre récipient.
Si vous n'avez pas besoin d'accéder en temps réel à des journaux, vous pouvez exporter les fichiers (au format tar) avec
docker export
-f
option existe depuis très longtemps (dans le panneau de l'échelle de temps, de toute façon). Au moins 7 mois conformément à cette question: github.com/dotcloud/docker/issues/2997docker logs
commande vers un fichier d'une montre de ce fichier, ou directement faire que dans le conteneur et d'exposer le fichier journal en tant que volume.Pour afficher la sortie standard (stdout), vous pouvez démarrer le conteneur docker avec
-i
. Bien sûr, cela ne vous autorise pas à quitter la route des processus et d'explorer le conteneur.Sinon, vous pouvez consulter le système de fichiers du conteneur à
Cependant ni de ces sont idéal. Si vous souhaitez afficher les journaux ou tout stockage persistant, la bonne façon de le faire serait fixation d'un volume avec le
-v
commutateur lorsque vous utilisezdocker run
. Cela signifie que vous pouvez inspecter les fichiers journaux sur l'hôte ou l'attacher à un autre récipient et les inspecter là.Vous pouvez voir le système de fichiers du conteneur à
et vous pouvez simplement
Le partage de fichiers entre un conteneur docker et le système hôte, ou entre des conteneurs distincts est mieux accomplie en utilisant les volumes.
Avoir une application qui s'exécute dans un autre récipient est probablement votre meilleure solution car elle permettra de s'assurer que l'ensemble de votre demande peut être bien isolé et facile à déployer. Ce que vous essayez de faire des sons très proche de la configuration décrite dans cet excellent post de blog, prendre un coup d'oeil!
Un peu en retard mais c'est ce que je fais avec
journald
. C'est assez puissant.Vous devez être en cours d'exécution de votre panneau de conteneurs sur un OS avec
systemd-journald
.docker run -d --log-driver=journald myapp
Ce tuyaux de l'ensemble du lot de l'hôte de journald qui prend soin de trucs comme journal de l'élagage, le format de stockage etc et vous donne quelques options intéressantes pour les afficher:
journalctl CONTAINER_NAME=myapp -f
qui va donner à votre console en tant qu'il est connecté,
journalctl CONTAINER_NAME=myapp > output.log
qui vous donne le tout dans un fichier à emporter, ou
journalctl CONTAINER_NAME=myapp --since=17:45
De Plus, vous pouvez encore voir les logs via
docker logs ....
si c'est votre préférence.Pas plus
> my.log
ou-v "/apps/myapp/logs:/logs"
etc