первый вопрос, поэтому извиняюсь, если я что-то испортил.
Итак, у меня есть стек Docker, состоящий из Nginx, Django, сельдерея и Flask -обернутого Java Программа, выполняющая процессы командной строки с использованием библиотеки подпроцессов Python. Цель состоит в том, чтобы контейнеры Django и / или Celery могли отправлять HTTP-запросы в контейнер Flask / Java, который запускает команду с помощью subprocess.run (), а затем возвращает данные через HTTP-ответ.
Интересной частью является контейнер Flask / Java, который работает нормально, если я запускаю его как отдельный контейнер и выполняю запросы от хост-машины. Однако после тестирования контейнера со стеком с помощью docker -compose я начинаю сталкиваться с проблемами.
В журналах видно, что контейнер Flask / Java получает HTTP-запрос, и подпроцесс начинает выполняться. Затем, через несколько секунд, Docker, кажется, полностью зависает, и мне приходится вручную перезагружать Docker Desktop, чтобы снова запустить его.
Настройка :
- Windows 10 Профессионал
- Docker v19.03.5
- Docker Составить 1.24.1
Ниже приведен фрагмент кода контейнера Flask / Java, выполняющего вызов подпроцесса:
def execute_opera(self, smiles_filename, predictions_filename):
"""
Executes OPERA CLI.
"""
subprocess.run([os.path.join(self.opera_exe_location, "opera"),
"-s", smiles_filename, # sets input smiles file
"-o", predictions_filename, # sets output csv file
# "-c", # cleans temp files from calculations
"-a"])
И в случае это полезно, вот Dockerfile, используемый для образа Flask / Java:
FROM python:3.7-slim
# Install requirements
COPY requirements.txt /tmp
RUN pip install -r /tmp/requirements.txt
ENV OPERA_EXE_PATH=/usr/local/bin/OPERA/application/run_OPERA.sh
ENV MATLAB_RUNTIME_PATH=/usr/local/MATLAB/MATLAB_Runtime/v94
ENV LD_LIBRARY_PATH=.:/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/opengl/lib/glnxa64
ENV IS_LINUX=True
COPY . /src
WORKDIR /src
RUN mkdir -p /usr/share/man/man1 && \
apt-get update && \
apt-get install -y openjdk-11-jre unzip && \
# apt-get install -y openjdk-11-jdk-headless wget unzip && \
# update-alternatives --config java && \
# wget https://github.com/kmansouri/OPERA/releases/download/v2.3-beta2/OPERA2.3_CL_mcr.tar.gz && \
tar -xvzf OPERA2.3_CL_mcr.tar.gz && \
rm OPERA2.3_CL_mcr.tar.gz && \
cd OPERA2_CL_mcr/ && \
./OPERA2.3_CL_mcr.install -mode silent -agreeToLicense yes && \
cd / && \
$OPERA_EXE_PATH $MATLAB_RUNTIME_PATH && \
mkdir -p /root/.mcrCache9.4/OPERA_0/ && \
echo "/usr/local/bin/OPERA/application" > /root/.mcrCache9.4/OPERA_0/OPERA_installdir.txt && \
rm -rf OPERA2_CL_mcr/ && \
rm -rf OPERA2.3_CL_mcr.tar.gz && \
apt-get autoremove && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
EXPOSE 3344
CMD ["waitress-serve", "--port=3344", "wsgi_flask:app"]
Я могу предоставить журналы и больше кода, если нужно, просто не хотел go за кадром отрывки кода, если не гарантировано.
Главное, с чем я прошу помощи, я думаю, как я могу go об устранении неполадок в этой проблеме, или если есть какие-то "уловки моментов" "связано с запуском подпроцессов в стеке Docker.