Как запустить несколько команд в Docker-контейнере при запуске? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть Flask контейнер приложения, который должен работать на порту 5000 .

У меня также есть фоновый процесс, который связан с очередью. Этот процесс имеет бесконечный цикл, поэтому я хочу запустить его в фоновом режиме.

Я использую файл docker-compose.yml для создания контейнера. На данный момент я могу запустить только одну команду, которая должна включить флеш-сервер.

flask run --host=0.0.0.0 --port 5000. Я использую опцию command в docker-compose.

Это команда, которую я хочу выполнить в фоновом режиме python app/workload/services/queue_services.py > qlog.txt.

Когда я сначала помещаю фоновую команду в command, сервер не запускается, и я вижу только вывод из фонового скрипта.

Когда я сначала ставлю команду flask run, фоновый скрипт вообще не запускается.

Есть ли какой-нибудь правильный способ запустить эти две команды при запуске контейнера?

Ответы [ 3 ]

3 голосов
/ 03 октября 2019

создайте script.sh

#!/bin/bash
python app/workload/services/queue_services.py > qlog.txt &
flask run --host=0.0.0.0 --port 5000

и установите его в качестве команды

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

Другим подходом может быть использование такой программы, как supervisord. Таким образом, мы можем масштабировать его до нескольких сервисов, не изменяя Dockerfile

https://docs.docker.com/config/containers/multi-service_container/

Я скомпилировал образ с supervisord и jre. https://hub.docker.com/r/palashgoel/supervisord-jre

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

Попробуйте добавить

CMD ["gunicorn", "--bind=0.0.0.0:5000", "--workers=1", "wsgi"]

в DockerFile

...