Модуль Azure web-app — Мультиконтейнер не был успешно запущен для приложения Django

#django #azure #docker #docker-compose #azure-web-app-service

Вопрос:

Хорошо, у меня есть реальная проблема с веб-приложением Azure для нескольких контейнеров, что бы я ни делал, я не могу заставить его работать. Я потратил на это несколько часов сам, а также с представителями Microsoft.

Проблема в том, что я не могу заставить веб-приложения для нескольких контейнеров работать с моим файлом docker-compose со связанными изображениями Docker. Служба находится в «режиме предварительного просмотра», т. Е. является своего рода бета-версией (мое предположение), так что здесь, в конце Microsoft, может быть какая-то ошибка, но я все равно хотел написать этот пост в надежде, что у кого-то может быть понимание, которое поможет мне разобраться в этом.

Это журналы, которые я получаю при попытке получить доступ к приложению в браузере, и это единственные доступные журналы, я проверил это в службе поддержки Microsoft:

 2021-11-24T08:53:40.341Z INFO - Pull Image successful, Time taken: 0 Minutes and 0 Seconds 2021-11-24T08:53:40.357Z INFO - Starting container for site 2021-11-24T08:53:40.360Z INFO - docker run -d -p 9688:80 --name companybe_backend_0_df9f2437 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=8000 -e WEBSITE_SITE_NAME=companybe -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=companybe.azurewebsites.net -e WEBSITE_INSTANCE_ID=*** -e HTTP_LOGGING_ENABLED=1 companycontainerregistry.azurecr.io/companybe:latest   2021-11-24T08:57:30.785Z ERROR - multi-container unit was not started successfully 2021-11-24T08:57:30.799Z INFO - Container logs from companybe_backend_0_df9f2437 = 2021-11-24T08:53:44.889298525Z projectile/manage.py:8: UserWarning: Not reading projectile/.env - it doesn't exist. 2021-11-24T08:53:44.889571929Z dotenv.read_dotenv() 2021-11-24T08:53:48.759572396Z projectile/manage.py:8: UserWarning: Not reading projectile/.env - it doesn't exist. 2021-11-24T08:53:48.759651597Z dotenv.read_dotenv() 2021-11-24T08:53:50.008743343Z Watching for file changes with StatReloader  2021-11-24T08:57:38.187Z INFO - Stopping site companybe because it failed during startup.  

Строка, отслеживающая изменения файлов…., указывает на то, что служба запущена, так как это то, что я вижу при ее локальном запуске, и после того, как это появилось, я могу получить доступ к службе в браузере (при локальном запуске).

Однако по какой-то причине кажется, что веб-приложение не может видеть, что служба запущена и она закрывается (согласно журналам, а также то, что я не могу получить доступ к службе в браузере).

Это мой файл компоновки docker, который я передаю через портал Azure в приложение с несколькими контейнерами:

 version: "3.3"  services:  backend:  image: companyregistry.azurecr.io/company:latest  container_name: backend  ports:  - "80:80"  

Я здесь перепробовал несколько конфигураций портов:

  • 8000:8000
  • 8000:80
  • 80:80
  • 80:8000
  • 443:443

I’ve also tried adding/removing WEBSITES_PORT = 8000 and PORT=80 in the app-configuration.

To make sure that the image works, I’ve both tried running it locally, which works fine and in ACI (Azure Container Instances) which is also working as expected, where I can reach the service in the browser.

I have also tried following a tutorial with an Image provided by Azure and used this in the docker-compose supplied in Azure Portal, which work.

Кроме того, я также попытался развернуть его как веб-приложение для отдельных контейнеров, а затем использовать файл Dockerfile (см. Ниже), который также работает должным образом (однако для его работы мне нужна конфигурация WEBSITES_PORT и ПОРТА).

Поэтому я озадачен:

  • Изображение работает в службе ACI Azure, но не в веб-приложении для нескольких контейнеров.
  • Изображение работает при развертывании в виде одного контейнера веб-приложения (с использованием Dockerfile), но не в виде нескольких контейнеров веб-приложения (с использованием docker-compose).
  • Еще одно изображение, взятое из учебника, используемого в нескольких контейнерах веб-приложения, работает.
  • Docker-compose отлично работает локально, но не в контейнере для нескольких веб-приложений

Мой Док-файл:

 # Set container as ubuntu FROM ubuntu:20.04  # Workaround for making compose up to work as intended ARG DEBIAN_FRONTEND=noninteractive   # Installing dependencies an packages RUN apt-get update amp;amp; apt-get install -y python3.9 python3.9-dev python3-pip postgresql-12 cron vim RUN pip3 install psycopg2-binary  # Set workdir WORKDIR /code  # Copy and install requirements COPY requirements.txt /code/ RUN pip install -r requirements.txt  # Copy all files from project into Docker COPY . /code/   EXPOSE 80 EXPOSE 8000 EXPOSE 8443   CMD python3 projectile/manage.py runserver 0.0.0.0:8000  

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

1. Отредактируйте свой вопрос, добавив полный файл создания

Ответ №1:

Итак, после 4 дней работы над этим вопросом мы, наконец, нашли ответ. Поскольку веб-приложение с несколькими контейнерами все еще находится в режиме предварительного просмотра, оно принимает только приложения, запущенные на порту 80 по умолчанию. Поэтому единственное, что нужно было изменить, — это изменить последнюю строку в файле Dockerfile на:

 CMD python3 projectile/manage.py runserver 0.0.0.0:80  

Кроме того, следующая строка в файле docker-compose, предоставленном в Центр развертывания на портале Azure, не будет соблюдаться, поэтому она является избыточной и может быть удалена:

 ports:  - "80:80"  

Таким образом, нового docker-compose достаточно, чтобы:

 services:  backend:  image: companyregistry.azurecr.io/company:latest  container_name: backend