2017-09-07 3 views
2

J'ai deux conteneurs Docker, un pour exécuter une instance Jenkins, et un pour exécuter YouTrack. Les scripts de démarrage respectifs ressemblent à ce qui suit:Pourquoi l'un de mes conteneurs Docker ne démarre-t-il pas automatiquement au démarrage de la machine?

  • Jenkins: docker run --name jenkins_master --restart on-failure -p 8080:8080 -p 50000:50000 -v /home/ci/jenkins_home/:/var/jenkins_home -d jenkins:latest

  • YouTrack: docker run --name youtrack --restart on-failure -p 8081:80 -v /home/ci/youtrack/data/:/opt/youtrack/data/ -v /home/ci/youtrack/backup/:/opt/youtrack/backup -d uniplug/youtrack

Comme vous pouvez le voir, rien de spécial, une cartographie du port et certains -v.

Je voudrais qu'ils commencent à courir lorsque je démarre le PC. The Docker documenation says « Docker fournit des politiques redémarrage pour contrôler si vos conteneurs commencent automatiquement quand ils sortent, ou lorsque Docker redémarre. »

Comme Docker « redémarre » quand je démarre ma machine, je supposais les deux conteneurs pour exécuter au démarrage en raison à --restart on-failure. Mais seulement Jenkins commence à fonctionner sur le port 8080, je dois démarrer manuellement YouTrack lorsque je redémarre ma machine.

Comment puis-je éviter le démarrage manuel du conteneur?

Répondre

4

Lorsque vous redémarrez votre PC, le démon docker essaie d'arrêter les conteneurs en cours d'exécution. Ceci est comme la course docker stop sur tous les conteneurs en cours d'exécution, ce qui est ce qui se passe (prise de here):

Lorsque vous exécutez une commande d'arrêt de docker Docker demandera d'abord bien pour le processus d'arrêter et si elle n » t se conformer dans les 10 secondes il le tuer de force. Si vous avez déjà émis un arrêt de docker et a dû attendre 10 secondes pour que la commande vous revenez avez vu dans cette action

Les tentatives de commande d'arrêt de docker pour arrêter un conteneur en cours d'exécution d'abord par envoyer un signal SIGTERM le processus racine (PID 1) dans le conteneur. Si le processus n'est pas terminé pendant la période de temporisation, un signal SIGKILL sera envoyé.

Pour vos conteneurs, vous avez spécifié --restart on-failure cela signifie que le démon docker redémarre vos conteneurs que si l'état de sortie est> 0 quand ils sortent. Ma conjecture sur votre problème est que votre conteneur youtrack réagit correctement au signal SIGTERM donné par le démon docker et se termine proprement (état de sortie 0). Sur le côté opposé, le conteneur jenkins ne sort pas proprement. Pour cette raison, seul le conteneur jenkins redémarre au redémarrage.

Pour résoudre ce problème, vous pouvez exécuter les conteneurs avec le drapeau --restart always et les conteneurs vont redémarrer dans tous les cas.

+0

J'ai déjà pensé à le paramétrer '--restart always', et il l'a corrigé. Merci pour les informations complémentaires! :) –

+0

Est-ce que cela devrait aussi fonctionner avec '--restart = unless-stopped'? – Extrawurst

+0

@Extrawurst Je pense mais pas sûr. Il est facile de vérifier que – whites11