2016-09-22 2 views
1

Je cours un conteneur Docker dans CoreOS (hôte) et montez un dossier hôte avec le dossier d'un conteneur.Redémarrage automatique du conteneur Docker lorsque le contenu du dossier hôte change

docker run -v /home/core/folder_name:/folder_name <container_name> 

Maintenant, chaque fois que je change (insert/delete) un certain fichier dans ce dossier hôte (folder_name), je dois redémarrer le conteneur (container_name) pour voir les effets.

docker restart <container_name> 

Est-il possible du côté hôte ou côté docker pour redémarrer automatiquement quand il y a un changement (insert/delete) dans le dossier?

Répondre

2

Redémarrer le conteneur docker sur un changement de dossier est plutôt antithétique à l'ensemble de la notion de la commande -v en premier lieu. Si vous avez vraiment vraiment besoin de redémarrer le conteneur de la manière que vous suggérez, la seule façon de le faire est de l'hôte docker. Il y a quelques outils (je peux nommer le dessus de ma tête, il y en a certainement plus) que vous pouvez utiliser pour surveiller le dossier hôte et lorsqu'un fichier est inséré ou supprimé, vous pouvez déclencher la commande docker restart <container_name>. Ces outils sont incron et inotify-tools. Here est une autre question posée par quelqu'un de semblable à la vôtre et la réponse recommandée en utilisant l'un des outils que j'ai suggéré. Maintenant, il est impossible que les fichiers du dossier hôte ne soient pas modifiés dans le conteneur docker. Il doit être que le programme que vous utilisez dans le conteneur docker ne met pas à jour sa vue du dossier /folder_name après son démarrage. Est-il possible de forcer l'actualisation ou la mise à jour du programme que vous exécutez dans le conteneur docker? La commande -v fonctionne via le montage de bind et a été une fonctionnalité stable dans docker pendant un certain temps. Avec le montage de bind, le dossier home/core/folder_name est (pour toutes fins pratiques) le même dossier que /folder_name dans le conteneur.

exécutez la commande

docker run -t -i -v /home/core/folder_name:/folder_name <container_name> /bin/sh

Cette commande vous donne un shell interactif dans le conteneur. Dans ce shell la commande:

cd /folder_name; touch a_file

Allez maintenant à/home/core/FOLDER_NAME sur l'hôte docker dans une coquille ou un navigateur de fichiers. Le fichier a_file sera là. Vous pouvez supprimer ce fichier sur l'hôte et revenir au shell s'exécutant dans le conteneur docker et exécuter ls /folder_name. Le fichier a_file ne sera pas là. Vous devez donc utiliser inotify ou incron pour redémarrer votre conteneur à chaque fois qu'un fichier change sur l'hôte ou pour savoir comment utiliser le programme que vous exécutez dans le conteneur docker pour qu'il mette à jour sa vue du dossier /folder_name.

+0

J'ai compris ce que vous vouliez dire. Maintenant, un autre problème est d'installer inotify dans Coreos. Il n'a pas de python ou de gcc. –

+0

Vous devriez pouvoir utiliser le gestionnaire de paquets de coreos pour installer python et gcc. Théoriquement, si c'est l'approche que vous allez prendre, vous devriez écrire un dockerfile qui installe tous les logiciels. [Ici] (https://docs.docker.com/engine/reference/builder/) est la documentation sur dockerfiles. – gpwclark

+0

Cette réponse vous a-t-elle aidé à comprendre le problème auquel vous faisiez face? – gpwclark