[英]CannotPullContainerError on Deploying Multi-container App on ElasticBeanstalk
[英]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"
我在這里嘗試了端口的多種配置:
我還嘗試在應用程序配置中添加/刪除 WEBSITES_PORT = 8000 和 PORT=80 。
為了確保圖像正常工作,我都嘗試在本地運行它,它工作正常,並且在 ACI(Azure 容器實例)中也按預期工作,我可以在瀏覽器中訪問該服務。
我還嘗試按照 Azure 提供的圖像的教程進行操作,並在 Azure 門戶中提供的 docker-compose 中使用了這個教程,它可以工作。
此外,我還嘗試將其部署為單個容器的網絡應用程序,然后使用 Dockerfile(見下文),它也可以按預期工作(但是我需要有 WEBSITES_PORT 和 PORT 配置才能工作) .
所以我很困惑:
我的 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.