J'ai un conteneur Docker avec un logiciel installé et configuré.
Il n’existe aucun programme supposé être démarré / exécuté tout le temps.
Ce que je veux - sa capacité à démarrer une commande en fonction d’événements externes. comme:
docker exec mysupercont /path/to/mycommand -bla -for
et
docker exec mysupercont /path/to/myothercommand
Mais "exec" est impossible lorsque le conteneur est arrêté, et ce conteneur contient également des données "de travail", qui utilisaient ces commandes, je ne peux donc pas utiliser
docker run ...
à chaque fois, car il recrée le conteneur de l'image et détruit mes données.
Quel est le "bon" et le "meilleur" moyen de faire couler ce conteneur? Quelle commande je peux commencer à l'intérieur?
docker run -d --name=name container tail -f /dev/null
Réponses:
Vous n'avez pas besoin de jouer à chaque fois
docker run
.docker run
est en fait une séquence de deux commandes: "create" et "start".Lorsque vous exécutez le conteneur, vous devez spécifier le "
-it
":Exemple:
Une fois le travail terminé, commande spécifiée au démarrage (dans mon exemple, bash). Par exemple, vous effectuez la "sortie". Le conteneur s'arrête:
Maintenant tu peux recommencer
Le conteneur est démarré et exécute à nouveau la commande "bash".
Connectez-vous à cette session "bash" avec la commande
En résumé : vous devez comprendre la différence entre le conteneur
run
etstart
.Regardez aussi la documentation sur le rôle des paramètres "
-i t
" et "-d
" pour le "Run"la source
docker attach ID
. Sortez de cette session sans terminer bash, vous pouvez utiliserCTRL-p CTRL-q
Toute cette affaire de savoir si vous pouvez ou non démarrer un conteneur arrêté dépend de la manière dont le conteneur a été créé à l'origine, c'est-à-dire exécuté. Si vous avez exécuté une commande qui s'est terminée ou vous avez quitté une commande interactive, par exemple bash, vous ne pouvez pas démarrer, redémarrer ou exécuter le conteneur arrêté. Tout ce que vous pouvez faire, c'est l'enlever. C'est de la camelote.
Mais le dernier commentaire de Taranaki, utilisez '-itd', semble être ce que le docker a ordonné.
Le conteneur continue à fonctionner, vous pouvez exécuter ce que vous voulez et vous pouvez arrêter, démarrer ou redémarrer le conteneur. Bien entendu, il ne s'agit que d'une conclusion préliminaire basée sur l'image alpine. Notez que si vous attachez le conteneur, il s’arrêtera lorsque vous quitterez, mais vous pourrez le redémarrer.
la source
Comme vous avez mentionné des tâches périodiques et que vous utilisez probablement quelque chose comme cron à cause de la façon dont vous voulez l'utiliser
docker exec
, j'ai juste le médicament pour vous. Au moins, j'ai fini par faire quelque chose comme ça.Dockerfile
Courez avec l'habituel
docker run -d ....
(j'ai utilisédocker-compose
)Configurer les machines hôtes crontab, par exemple:
Je trouve cette solution intéressante, car nous nous appuyons sur l'ancienne crontab, qui a fait ses preuves, dans un bel environnement Linux par défaut, tandis que Docker gère les variables et les variables d'environnement les plus exotiques de votre logique d'entreprise. Vous pouvez également définir certaines limites si vos tâches périodiques sont bloquées et présentent des fuites de mémoire, etc.
la source
Tail provoque toujours certaines opérations sur les fichiers de temps en temps.
Voici ma solution pour dormir pour toujours, sans aucun effet secondaire.
Comment ça marche
la source