Как запустить несколько команд в контейнере докеров при запуске?

У меня есть контейнер приложения 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, фоновый скрипт вообще не запускается.

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


person Underoos    schedule 03.10.2019    source источник
comment
Обычно вы запускаете другую команду во втором контейнере. Есть ли какая-то конкретная причина, по которой он должен быть в одном контейнере?   -  person David Maze    schedule 03.10.2019
comment
Согласно требованию, над которым я работаю, они должны быть в одном контейнере.   -  person Underoos    schedule 03.10.2019


Ответы (3)


создать script.sh

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

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

person LinPy    schedule 03.10.2019

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

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

в DockerFile

person sandeep    schedule 03.10.2019

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

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

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

person Palash Goel    schedule 04.10.2019