Я видел кучу учебников, которые, похоже, делают то же самое, что я пытаюсь сделать, но почему-то мои контейнеры Docker выходят. В принципе, я настраиваю веб-сервер и несколько демонов внутри контейнера Docker. Я делаю последние части этого через сценарий bash под названием run-all.sh
, который я запускаю через CMD в своем файле Docker. run-all.sh
выглядит следующим образом:Как сохранить контейнер Docker после запуска?
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, чтобы поддерживать его, но каков правильный способ удержать его от выхода?
Вы подвергаете порты услуг внешним (опция -p для запуска докеров)? (конечно, это не помешает им выйти) – ribamar