#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
Важными моментами здесь является то, что каждый контейнер запускает один процесс на переднем плане.
Если ваш основной командный скрипт завершит его и завершит работу, контейнер тоже завершится. Показанный вами скрипт запускает только фоновые процессы, а затем завершается, и когда он завершается, контейнер завершается. Для поддержания работы контейнера должен быть какой-то процесс переднего плана, и самый простой способ сделать это — просто запустить главный сервер, который вам нужно запустить как единственный процесс в контейнере.