Подпроцесс не может найти файл при запуске из файла Python в контейнере Docker - PullRequest
0 голосов
/ 31 октября 2019

Я создал простое приложение Flask, которое я пытаюсь развернуть в Docker.

Базовый пользовательский интерфейс будет загружаться на локальный хост, но когда я выполняю команду, которая вызывает определенную функцию, он продолжает отображать:

"Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку и не смогчтобы выполнить ваш запрос. Либо сервер перегружен, либо в приложении произошла ошибка. "

Просматривая журналы Docker, я вижу проблему в том, что файл не может быть найден командой subprocess.popen:

"FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'test_2.bat': 'test_2.bat' 172.17.0.1 - - [31 / Oct / 2019 17:01:55]" POST / loginHTTP / 1.1 "500"

Файл, безусловно, существует в среде Docker, в контейнере, который я вижу в списке в корневом каталоге.

Я также попытался изменить:

item = subprocess.Popen(["test_2.bat", i], shell=False,stdout=subprocess.PIPE)

до:

item = subprocess.Popen(["./test_2.bat", i], shell=False,stdout=subprocess.PIPE)

, который выдал альтернативную ошибку:

"OSError: [Errno 8] Ошибка формата Exec: './test_2.bat' 172.17.0.1 -- [31 / Oct / 2019 16:58:54] "POST / логин HTTP / 1.1" 500 "

Я добавил shebang в начало обоих .py файлов, включенных в приложение Flask (хотя, возможно, я сделал это неправильно):

#!/usr/bin/env python3

и это Dockerfile:

FROM python:3.6

RUN adduser lighthouse

WORKDIR /home/lighthouse

COPY requirements.txt requirements.txt
# RUN python -m venv venv
RUN pip install -r requirements.txt
RUN pip install gunicorn

COPY templates templates
COPY json_logs_nl json_logs_nl
COPY app.py full_script_manual_with_list.py schema_all.json ./
COPY bq_load_indv_jsons_v3.bat test_2.bat ./
RUN chmod 644 app.py
RUN pip install flask

ENV FLASK_APP app.py

RUN chown -R lighthouse:lighthouse ./
USER lighthouse

# EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]

Я использую Ubuntu и WSL2 для запуска Docker на компьютере с Windows без виртуальной коробки. У меня нет проблем с навигацией по моей файловой системе Windows или созданием образов Docker, поэтому я думаю, что эта конфигурация не является проблемой - но на всякий случай.

Если у кого-нибудь есть какие-либо идеи, чтобы помочь подпроцессу найти test_2.bat, я был бы оченьблагодарен!

Редактировать: приложение работает точно так же, как и ожидалось, когда выполняется локально через командную строку с «запуск колбы»

1 Ответ

0 голосов
/ 05 ноября 2019

Если кто-то сталкивался с подобной проблемой, решение было:

item = subprocess.Popen (["ls", "/test_2.bat", i], stdout = subprocess.PIPE, shell =Верно)

Однако, хотя теперь он может найти файл bat, он еще не может его запустить - я обновлю этот ответ, как только он заработает.

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