Comment monter un répertoire dans un conteneur Docker à l'hôte?
Supposer que j'ai une application avec cette simple Dockerfile:
//...
RUN configure.sh --logmyfiles /var/lib/myapp
ENTRYPOINT ["starter.sh"]
CMD ["run"]
EXPOSE 8080
VOLUME ["/var/lib/myapp"]
Et je lance un conteneur à partir de:
sudo docker run -d --name myapp -p 8080:8080 myapp:latest
De sorte qu'il fonctionne correctement et les magasins de certains journaux en /var/lib/myapp
de conteneur docker.
Ma question
J'ai besoin de ces fichiers log automatiquement enregistrées dans l'hôte trop, Alors comment puis-je monter le /var/lib/myapp
du conteneur à l' /var/lib/myapp
dans le serveur hôte (sans retirer le conteneur actuel) ?
Modifier
Je vois aussi Docker - Répertoire de Montage De Récipient pour accueillirmais ça ne résout pas mon problème j'ai besoin d'un moyen de sauvegarde de mes fichiers de menu fixe à l'hôte.
source d'informationauteur Saeed Masoumi
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, un peu d'information sur Docker volumes. Le Volume monte se produire qu'au conteneur moment de la création. Cela signifie que vous ne pouvez pas modifier le volume monte après que vous avez commencé le conteneur. Aussi, le volume monte à sens unique uniquement: à Partir de l'hôte dans le récipient, et non pas vice-versa. Lorsque vous spécifiez un répertoire de l'hôte monté comme un volume dans votre conteneur (par exemple quelque chose comme:
docker run -d --name="foo" -v "/path/on/host:/path/on/container" ubuntu
), c'est un "régulier ole" linuxmount --bind
ce qui signifie que le répertoire de l'hôte sera temporairement "remplacer" le dossier conteneur. Rien n'est réellement supprimés ou écrasés sur le répertoire de destination, mais en raison de la nature de conteneurs, qui signifie il sera remplacé pour la durée de vie du conteneur.Donc, vous êtes de gauche avec deux options (peut-être trois). Vous pourriez monter un répertoire de l'hôte dans le récipient et ensuite copier ces fichiers dans votre script de démarrage (ou si vous apporter cron dans votre conteneurvous pouvez utiliser un cron pour régulièrement copier ces fichiers dans ce répertoire de l'hôte de montage de volume).
Vous pouvez également utiliser
docker cp
pour déplacer des fichiers à partir de votre conteneur à votre hôte. Maintenant que c'est un peu hacky et certainement pas quelque chose que vous devriez utiliser dans votre infrastructure d'automatisation. Mais il ne très bien que le but exact. One-off ou de débogage est une excellente situation pour que.Vous pourriez peut-être aussi mettre en place un réseau de transfert, mais c'est assez pour ce que vous faites. Toutefois, si vous voulez le faire régulièrement pour vos fichiers de log (ou autre), on peut le voir en utilisant quelque chose comme
rsyslog
de déplacer les fichiers de votre conteneur.C'est le contraire: vous pouvez monter un dossier de votre conteneur
docker run
.Je ne le pense pas.
Dès maintenant, vous pouvez vérifier
docker inspecter <nomconteneur>
et voir si vous voyez votre journal dans le/var/lib/docker/volumes/...
associée au volume de votre conteneur.Ou vous pouvez rediriger le résultat de
docker journaux <nomconteneur>
à un fichier hôte.Pour plus d'exemple, voir ce gist.
(encore une fois, qui s'appliquent à un conteneur de votre départ, et non en cours d'exécution existant un)