Контейнер Docker в Azure /bin/sh: 1: [gunicorn,: не найден

#python #azure #docker

Вопрос:

У меня есть следующая проблема:

У меня есть небольшое веб-приложение, написанное на Python. Я запускаю его в контейнере docker. Локально веб — приложение работает нормально. При развертывании контейнера в службе приложений Azure я получаю следующую ошибку:

2021-09-07T15:11:32.980846527Z /bin/sh: 1: [gunicorn,: not found

Вот мой док-файл

 FROM python:3.8-slim-buster

EXPOSE 5000

ENV PYTHONDONTWRITEBYTECODE=1

ENV PYTHONUNBUFFERED=1

COPY requirements.txt .
RUN python -m pip install -r requirements.txt

WORKDIR /app
COPY . /app

RUN adduser -u 5678 --disabled-password --gecos "" appuser amp;amp; chown -R appuser /app
USER appuser

CMD ["gunicorn", "--bind", "0.0.0.0:5000", "dash_appdashboard:server"]
 

И вот это requirements.txt

 flask
gunicorn
dash
pandas
 

Я новичок в docker и python. Насколько я понимаю, pip install должен установить последнюю версию всего, начиная с requirements.txt в самом контейнере. Я не понимаю, почему нельзя найти пушечный корн.

Любая помощь будет очень признательна.

Комментарии:

1. Эта ошибка обычно означает, что ваш CMD синтаксис на самом деле не является допустимым массивом JSON. Здесь я предполагаю d , что это недопустимая обратная косая черта; вам нужно избежать \ обратной косой черты или использовать имя пакета Python dash_app.dashboard:server ?

2. @HeadInTheClouds, вы смогли решить эту проблему?

Ответ №1:

Из документов:

Если вы хотите запустить свой <command> без оболочки, то вы должны выразить команду в виде массива JSON и указать полный путь к исполняемому файлу. Эта форма массива является предпочтительным форматом CMD . Любые дополнительные параметры должны быть индивидуально выражены в виде строк в массиве.

То есть вы должны указать полный путь к gunicorn исполняемому файлу или использовать формат оболочки:

 CMD gunicorn --bind 0.0.0.0:5000 dash_appdashboard:server