J'ai vu un tas de tutoriels qui semblent faire la même chose que j'essaie de faire, mais pour une raison quelconque, mes conteneurs Docker se terminent. En gros, je mets en place un serveur Web et quelques démons dans un conteneur Docker. Je fais les dernières parties de cela via un script bash appelé run-all.sh
que je lance via CMD dans mon Dockerfile. run-all.sh
ressemble à ça:
service supervisor start
service nginx start
Et je le démarre dans mon Dockerfile comme suit:
CMD ["sh", "/root/credentialize_and_run.sh"]
Je peux voir que tous les services démarrent correctement lorsque j'exécute les choses manuellement (c'est-à-dire que je passe à l'image avec -i -t / bin / bash), et que tout semble fonctionner correctement lorsque j'exécute l'image, mais il se termine une fois il termine le démarrage de mes processus. J'aimerais que les processus s'exécutent indéfiniment, et pour autant que je sache, le conteneur doit continuer à fonctionner pour que cela se produise. Néanmoins, quand je cours docker ps -a
, je vois:
➜ docker_test docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah "sh /root/run-all.sh 8 minutes ago Exited (0) 8 minutes ago grave_jones
Ce qui donne? Pourquoi sort-il? Je sais que je pourrais simplement mettre une boucle while à la fin de mon script bash pour le maintenir, mais quelle est la bonne façon de l'empêcher de se terminer?