Azure 应用服务共享托管失败容器启动

Posted

技术标签:

【中文标题】Azure 应用服务共享托管失败容器启动【英文标题】:Azure App Service shared hosting fail container startup 【发布时间】:2021-09-02 21:12:33 【问题描述】:

我有一个 Azure 应用服务运行我自己的基于 php 的 docker 映像 (mcr.microsoft.com/appsvc/php:7.4-apache_20201229.1)

部署到服务工作正常,网站按预期运行 (WEBSITES_ENABLE_APP_SERVICE_STORAGE : false)

我希望能够使用持久存储来保存失败/网络应用重新启动的数据...

我想使用内置的持久存储并设置应用程序设置WEBSITES_ENABLE_APP_SERVICE_STORAGE to true,像这样使用 docker compose:

version: '3.3'

services:
   back:
     image: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     volumes:
      - $WEBAPP_STORAGE_HOME/site/wwwroot:/var/www/html
     ports:
       - "8000:80"
     restart: always

但是,在更改此设置并停止/启动 Web 应用程序后,容器不再成功启动并且没有给出原因。

我得到的日志如下:

2021-06-17T23:49:43.847Z INFO  - Starting container for site
2021-06-17T23:49:43.847Z INFO  - docker run -d -p 8081:80 --name XXXXXXXXXXXXXXX -e WEBSITE_CORS_ALLOWED_ORIGINS=XXXXXXXXX -e WEBSITE_CORS_SUPPORT_CREDENTIALS=True -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=XXXXXXXXXXXXXXXXX -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=XXXXXXXXXXXXXXX -e WEBSITE_INSTANCE_ID=bd0010bcc7f2a648cafc4bcac18f1660692939e3ec29400aeb60d8a3d788c1c3 -e HTTP_LOGGING_ENABLED=1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
2021-06-17T23:53:34.572Z ERROR - multi-container unit was not started successfully

WEBSITES_ENABLE_APP_SERVICE_STORAGE 对我的容器有什么影响?我对正在运行的 kudu 实例有 bash 访问权限(ssh 也中断了),但我没有从我的应用程序中看到任何文件

是否有任何日志可以让我查看 WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置的失败或我未考虑的任何内容?

谢谢

编辑:

当只放WEBSITES_ENABLE_APP_SERVICE_STORAGE = true,并在启动命令中添加-v $WEBAPP_STORAGE_HOME/site/wwwroot/storage:/storage时,wwwroot的内容将被删除,我的docker镜像将被替换为

2021-06-18T08:07:54.534Z INFO  - docker run -d -p 2301:80 --name XXXXXXXXXXXXXX_0_f194ab38 -e WEBSITE_CORS_ALLOWED_ORIGINS=https://XXXXXXXXXXX.azurewebsites.net -e WEBSITE_CORS_SUPPORT_CREDENTIALS=True -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=XXXXXXXXXXXX -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=XXXXXXXXXXXXXXXXXXXXXXXXXXX.azurewebsites.net -e WEBSITE_INSTANCE_ID=bd0010bcc7f2a648cafc4bcac18f1660692939e3ec29400aeb60d8a3d788c1c3 -e HTTP_LOGGING_ENABLED=1 **IMAGE** -v $WEBAPP_STORAGE_HOME/site/wwwroot/storage:/storage 

2021-06-18T08:07:55.414Z INFO  - Starting container for site
2021-06-18T08:07:55.415Z INFO  - docker run -d -p 4849:8081 --name XXXXXXXXXXXXXXXXXX_0_f194ab38_middleware -e WEBSITE_CORS_ALLOWED_ORIGINS=https://XXXXXXXXXXXXXX -e WEBSITE_CORS_SUPPORT_CREDENTIALS=True -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=xXXXXXXXXXXX -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=XXXXXXXXXXXXXX.azurewebsites.net -e WEBSITE_INSTANCE_ID=bd0010bcc7f2a648cafc4bcac18f1660692939e3ec29400aeb60d8a3d788c1c3 -e HTTP_LOGGING_ENABLED=1 appsvc/middleware:1.4.5 /Host.ListenUrl=http://0.0.0.0:8081 /Host.DestinationHostUrl=http://172.16.27.2:80 /Host.UseFileLogging=true 

【问题讨论】:

【参考方案1】:

应用程序设置 WEBSITES_ENABLE_APP_SERVICE_STORAGE 用于将 Azure 存储中的位置装载到 /home 装载点。

WEBAPP_STORAGE_HOME 是应用服务中的一个环境变量,映射到应用的持久存储。

https://docs.microsoft.com/en-us/archive/blogs/waws/things-you-should-know-web-apps-and-linux#if-your-site-doesnt-start-check-the-docker-logapplies-to-web-app-for-containers.

您还可以利用应用服务内置的“诊断和解决问题”刀片来更好地了解容器崩溃或无法启动的原因。

【讨论】:

以上是关于Azure 应用服务共享托管失败容器启动的主要内容,如果未能解决你的问题,请参考以下文章

从存储容器恢复 Azure Linux webapp 备份失败 PowerShell

TLS1.2 上的 Azure 应用服务到应用服务通信失败

Azure 中托管的节点服务器上的 Websocket 失败

如何使用 Azure Web 应用容器公开端口 3000?

Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误

如何从 Azure Data Studio 与 Docker 中托管的 SQL Server 2019 容器进行通信