Comment arrêter normalement un serveur fonctionnant dans docker
Je commence mongodb via le point d'entrée config dans un menu fixe de fichier.
Il fonctionne très bien. Cependant, lorsque j'execute:
docker stop <containerid>
il semble être l'envoi d'un signal SIGTERM pour le processus. Ce qui signifie que le mongod.lock
fichier n'est pas effacé. Comment puis-je gracieusement l'arrêt de l'exécution d'un docker récipient de sorte que les signaux sont envoyés au processus en cours d'exécution à l'intérieur de docker ?
source d'informationauteur canadadry
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de comprendre.
docker stop <id>
sera en effet d'envoyer un signal SIGTERM. C'est par la conception. Si le processus ne s'arrête pas correctement dans le délai d'attente (la valeur par défaut est de 10 secondes), puis un SIGKILL est émise.Pour le moment, nous avons quelques problèmes avec la propagation du signal. Elle est due à la pid espace de noms et le fait que le processus de pid 1. Ce devrait être bientôt corrigé avec la nouvelle de l'exécution de plugins.
Je suis en utilisant le panneau de 0,9. SIGTERM sera envoyé à traiter avec PID=1 à l'intérieur d'un conteneur lors de l'appel panneau stop . Afin que nous puissions gérer les sous-processus avec supervisord, runit.
Le problème, c'est quand nous appelons $ service panneau stop|restartou la machine hôte de réinitialisation. Docker va pas envoyer de signal SIGTERM à tous les récipients. Je suis en train d'essayer de résoudre cette affaire.
En utilisant le Panneau de 0,9 ou plus tard, il enverra SigTerm pour le 1er (qui est en cours d'exécution à l'intérieur du contenant) par défaut.
Mais l'avis de la variable d'environnement de fichier (/etc/default/docker sur Ubuntu et /etc/sysconfig/docker dans CentOS) devrait inclure DOCKER_OPTS=" -r=false " (ou other_args=" -r=false" dans CentOS) d'arrêt de docker de redémarrage automatique du conteneur.
Par exemple, je suis en utilisant cette configuration:
DOCKER_OPTS=" g /mydir/débardeur -r=false --dns 8.8.4.4 "
Si vous voulez faire du multi-processus à l'intérieur d'un conteneur, vous devez à l'aide de supervisord la 1ère processus, supervisord permettra de gérer d'autres processus et de transfert des signaux.