запуск двух отдельных API-интерфейсов Python-Flask через один файл docker

#python #docker

#python #docker

Вопрос:

Я хочу запустить два разных файла API python, работающих на разных портах, через один контейнер.

Мой файл docker выглядит так:

 FROM python:3.7-slim-buster

RUN apt-get update amp;amp; apt-get install -y libgtk2.0-dev cmake libpoppler-cpp-dev poppler-utils tesseract-ocr

WORKDIR /app

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt 



COPY . .

RUN chmod a x run.sh

CMD ["./run.sh"]
 

И файл .sh выглядит так:

 #!/bin/bash

exec python3 /app1/numberToWord.py amp;
exec python3 /app2/dollarToGbp.py amp;
 

Хотя сборка docker прошла успешно без каких-либо ошибок, запуск docker не выдает никаких ошибок и завершает работу из командной строки. Мне любопытно узнать, где он терпит неудачу, любая информация высоко ценится.

Ответ №1:

Попробуйте использовать nohup, чтобы игнорировать сигнал зависания

Пример:

 #!/bin/bash

nohup python3 /app1/numberToWord.py amp;
nohup python3 /app2/dollarToGbp.py amp;
 

Ответ №2:

При запуске контейнера вы можете указать конкретную команду для запуска. Вы можете запустить два контейнера из одного и того же изображения с разными командами:

 docker run -p 8000:8000 --name spelling -d image /app1/numberToWord.py
docker run -p 8001:8000 --name currency -d image /app2/dollarToGbp.py
 

Важными моментами здесь является то, что каждый контейнер запускает один процесс на переднем плане.

Если ваш основной командный скрипт завершит его и завершит работу, контейнер тоже завершится. Показанный вами скрипт запускает только фоновые процессы, а затем завершается, и когда он завершается, контейнер завершается. Для поддержания работы контейнера должен быть какой-то процесс переднего плана, и самый простой способ сделать это — просто запустить главный сервер, который вам нужно запустить как единственный процесс в контейнере.