Docker не отвечает, когда контейнер Celery выполняет subprocess.run () - PullRequest
0 голосов
/ 21 января 2020

первый вопрос, поэтому извиняюсь, если я что-то испортил.

Итак, у меня есть стек 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...