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

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

Проблема в том, что я не могу заставить веб-приложения для нескольких контейнеров работать с моим файлом docker-compose с соответствующими образами Docker. Сервис находится в "preview-mode", т.е. является своего рода бета-версией (мое предположение), так что это может быть какая-то ошибка со стороны 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.

Строка - Watching for file changes.... указывает на то, что служба запущена, так как это то, что я вижу при локальном запуске, и после этого я могу получить доступ к службе в браузере (при локальном запуске).

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

Вот мой файл docker-compose, который я передаю через 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

Я также пробовал добавлять/удалять WEBSITES_PORT = 8000 и PORT=80 в app-configuration.

Чтобы убедиться, что образ работает, я попробовал запустить его локально, что работает нормально, и в ACI (Azure Container Instances), который также работает, как ожидалось, где я могу достичь сервиса в браузере.

Я также попробовал следовать руководству с изображением, предоставленным Azure, и использовал его в docker-compose, поставляемом в Azure Portal, которые работают.

Кроме того, я также попробовал развернуть его как веб-приложение для отдельных контейнеров, а затем использовать Dockerfile (см. ниже), которые также работают, как ожидалось (однако тогда мне нужно иметь конфигурации WEBSITES_PORT и PORT на месте, чтобы они работали).

Так что я в недоумении:

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

Мой Dockerfile:

# 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 && 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

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

CMD python3 projectile/manage.py runserver 0.0.0.0:80

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

ports:
  - "80:80"

Итак, новый docker-compose является достаточным:

services:
  backend:
    image: companyregistry.azurecr.io/company:latest
    container_name: backend
Вернуться на верх