#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