Docker Flask Conda - не среда conda - PullRequest
0 голосов
/ 30 мая 2020

Я играю с приложением flask, которое использует среду conda. Приложение отлично работает при локальной разработке, поэтому я захотел докеризовать его. Сборка через Dockerfile прошла успешно, но когда я запускаю приложение через:

docker run -p 5000:5000 3d-photo

, я получил:

Not a conda environment: /opt/conda/envs/myenv
  File "app.py", line 18
    def render(filter_name: str):
                          ^
SyntaxError: invalid syntax
ERROR conda.cli.main_run:execute(39): Subprocess for 'conda run [u'python', u'app.py']' command failed.  Stderr was:
Not a conda environment: /opt/conda/envs/myenv
  File "app.py", line 18
    def render(filter_name: str):
                          ^
SyntaxError: invalid syntax

Код, который выдает ошибку, выглядит так:

@app.route("/render/<filter_name>", methods=["POST"])
def render(filter_name: str):
    if request.method == "POST":
        f = request.files["file"]

        tempdir = tempfile.mkdtemp()
        in_dir = tempfile.mkdtemp(prefix="image_", dir=tempdir)
        out_dir = tempfile.mkdtemp(prefix="image_", dir=tempdir)

        image = Image.open(BytesIO(f.read()))
        image.save(in_dir.name + "/image.jpg", "JPEG")

        render_mp4(in_dir.name, out_dir.name, filter_name)

        filename = "image_" + filter_name + ".mp4"
        fout = open(os.path.join(out_dir.name, filename), "rb")

        response = make_response(fout.read())
        response.headers.set("Content-Type", "video/mp4")
        response.headers.set("Content-Disposition", "attachment", filename=filename)
        shutil.rmtree(tempdir)

        return response

и файл Docker:

FROM ubuntu:latest
FROM continuumio/miniconda:latest
RUN apt-get update && apt-get install -y \
    python3-pip \
    python3-dev \
    build-essential
RUN pip3 install auxlib
COPY . /app
WORKDIR /app
RUN conda env create --file exported_conda_env.yml
SHELL ["conda", "run", "-n", "3DPhotoCreator", "/bin/bash", "-c"]
RUN pip install -r requirements.txt
RUN conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit==10.1.243 -c pytorch
EXPOSE 5000
CMD ["conda", "run", "-n", "myenv", "python", "app.py"]

Здесь есть подсказки?

1 Ответ

1 голос
/ 31 мая 2020

Вы никогда не создавали среду с именем myenv. Похоже, вы создали среду с именем 3DPhotoCreator, но не myenv. Непонятно, что вы пытаетесь сделать.

Кстати, я думаю, что, вероятно, нет необходимости использовать conda run, если только ваши зависимости не зависят от установленных специальных переменных среды. (Я так не думаю.) Вы, вероятно, можете просто вызвать интерпретатор python без явной активации среды:

CMD /opt/conda/envs/3DPhotoCreator/bin/python app.py
...