точка входа в докер с использованием dos2unix - PullRequest
0 голосов
/ 18 октября 2019
  • Когда я запускаю docker-compose up -d --build
  • Dockerfile не запускает CMD bash /webapp/runscript.sh
  • Сказано по-другому ... Я не вижу, что приложение redis-server или celery работает, когда я выполняю exec в контейнер
  • Если я вручную запускаю "bash /webapp/runscrip.sh";процессы в конечном итоге запускаются
  • Первоначально я пытался Entrypoint ['bash', '/webapp/runscript.sh'], но безуспешно. Не уверен, что мне не хватает

конец dockerfile

RUN mkdir -p /logs

COPY runscript.sh /webapp/runscript.sh
RUN chmod -R u+x /webapp/runscript.sh
RUN dos2unix /webapp/runscript.sh
CMD bash /webapp/runscript.sh

CMD tail -f /dev/null

runcript.sh

#!/bin/bash

nohup redis-server > /logs/redis.out &
nohup celery -A app.celery worker --loglevel=info > /logs/celery_worker.out &
nohup celery flower -A app.celery > /logs/celery_flower.out &

1 Ответ

0 голосов
/ 19 октября 2019

Шаг CMD в Dockerfile устанавливает метаданные на образе, сообщая докеру команду по умолчанию, которая должна выполняться при запуске контейнера. Вы можете иметь только одно значение для CMD, поэтому при повторной установке все предыдущие настройки будут перезаписаны.

Для контейнеров может быть запущен только один процесс, и этот процесс запускается как pid 1 внутри контейнера. Как только этот процесс завершается, весь контейнер останавливается, включая любые фоновые процессы.

Поэтому вам нужно установить CMD для любой команды или сценария, который вы хотите запустить, и эта команда должна оставаться запущеннойна время жизни вашего контейнера. Это может быть так же просто, как запуск tail -f /dev/null, как в последней строке вашего скрипта. Однако рекомендуемая практика - запускать приложение на переднем плане, а не в фоновых демонах, которые могут неожиданно зависать. Я бы очень хотел, чтобы внутри контейнера было несколько демонов, есть такие инструменты, как supervisord. Но в большинстве случаев лучше запускать несколько контейнеров, по одному на службу, и обмениваться данными между этими службами через общую сеть докеров. docker-compose очень полезно для настройки этой сети и развертывания ваших контейнеров с соответствующими конфигурациями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...