簡體   English   中英

Azure web-app - Django 應用程序的多容器單元未成功啟動

[英]Azure web-app - Multi-container unit was not started successfully for Django app

好的,對於多容器的 Azure Web 應用程序有一個真正的問題,無論我做什么,我都無法讓它工作。 我自己和 Microsoft 代表都在這方面花費了數小時。

問題是我無法讓多個容器的 Web 應用程序與我的 docker-compose 文件以及相關的 Docker 圖像一起使用。 該服務處於“預覽模式”,即某種測試版(我的猜測),所以它可能是微軟最后的一些錯誤,但我仍然想寫這篇文章,希望有人可能有洞察力來幫助我想出解決辦法。

這是我嘗試在瀏覽器中訪問應用程序時得到的日志,這是唯一可用的日志,我已通過 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.... 表示服務已啟動,因為這是我在本地運行時看到的,並且在出現之后,我可以在瀏覽器中訪問該服務(在本地運行時)。

但是,由於某種原因,似乎網絡應用程序無法看到該服務正在運行並且它正在被關閉(根據日志以及我無法在瀏覽器中訪問該服務)。

這是我通過 Azure 門戶向多容器應用程序提供的 docker-compose 文件:

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 。

為了確保圖像正常工作,我都嘗試在本地運行它,它工作正常,並且在 ACI(Azure 容器實例)中也按預期工作,我可以在瀏覽器中訪問該服務。

我還嘗試按照 Azure 提供的圖像的教程進行操作,並在 Azure 門戶中提供的 docker-compose 中使用了這個教程,它可以工作。

此外,我還嘗試將其部署為單個容器的網絡應用程序,然后使用 Dockerfile(見下文),它也可以按預期工作(但是我需要有 WEBSITES_PORT 和 PORT 配置才能工作) .

所以我很困惑:

  • 該映像在 Azure 的 ACI 服務中工作,但不適用於多個容器的 Web 應用程序。
  • 該圖像在部署為 web-app 單個容器(使用 Dockerfile)時工作,但不是作為 web-app 多個容器(使用 docker-compose)。
  • 從 web-app 多個容器中使用的教程中獲取的另一個圖像可以工作。
  • docker-compose 在本地工作正常,但在 web-app 多個容器中不能正常工作

我的 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 天后,我們終於找到了答案。 由於多容器 web-app 仍處於預覽模式,它只接受在默認端口 80 上運行的應用程序。所以唯一需要更改的是將 Dockerfile 中的最后一行更改為:

CMD python3 projectile/manage.py runserver 0.0.0.0:80

此外,在 Azure 門戶中的部署中心中提供的 docker-compose 文件中的以下行將不被尊重,因此是多余的,可以刪除:

ports:
  - "80:80"

所以新的 docker-compose 就足夠了:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM