Я видел кучу учебников, которые, похоже, делают то же самое, что я пытаюсь сделать, но почему-то мои контейнеры Docker выходят. В принципе, я настраиваю веб-сервер и несколько демонов внутри контейнера Docker. Я делаю последние части этого через bash script, называемый run-all.sh
, который я запускаю через CMD в своем файле Docker. run-all.sh
выглядит следующим образом:
service supervisor start
service nginx start
И я начинаю его внутри моего Dockerfile следующим образом:
CMD ["sh", "/root/credentialize_and_run.sh"]
Я вижу, что все службы запускаются правильно, когда я запускаю вещи вручную (например, получая изображение с -i -t/bin/ bash), и все выглядит так, как будто он работает правильно, когда я запускаю изображение, но он выходит, как только он заканчивает запуск моих процессов. Я хотел бы, чтобы процессы выполнялись бесконечно, и, насколько я понимаю, контейнер должен продолжать работать, чтобы это произошло. Тем не менее, когда я запускаю docker ps -a
, я вижу:
➜ 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
Что дает? Почему он выходит? Я знаю, что я мог бы просто поставить цикл while в конце моего bash script, чтобы сохранить его, но как правильно удержать его от выхода?