Azure App Service 共享托管中断容器启动
Posted
技术标签:
【中文标题】Azure App Service 共享托管中断容器启动【英文标题】:Azure App Service shared hosting breaking container startup 【发布时间】:2021-07-02 14:08:18 【问题描述】:我有一个 Azure 应用服务运行我自己的基于 node:14-alpine
的 docker 映像。
部署到服务工作正常,网站按预期运行。
我希望能够在容器之间共享一些文件,我之前一直使用映射为 docker 卷的 Azure FileStorage 帐户,但是由于某种原因 docker/pm2/node 会不断执行写入,这意味着大量成本。
我想使用内置的持久存储并将应用程序设置 WEBSITES_ENABLE_APP_SERVICE_STORAGE
设置为 true,理论上这应该在容器之间共享 /home
目录并启用存储以持久重启。
但是在更改此设置并重新启动后,容器不再成功启动并且没有给出原因。
我得到的日志如下:
docker run -d -p 2641:3001 --name [service_name]_2_d9625e76 -e PORT=3001 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=[service_name] -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=[service_name].azurewebsites.net -e WEBSITE_INSTANCE_ID=962880a44b3c94xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1e1a66c48ac6b9 -e HTTP_LOGGING_ENABLED=1 [service_name].azurecr.io/[service_name]:latest
2021-04-06T17:47:14.867Z INFO - Initiating warmup request to container [service_name]_2_d9625e76 for site [service_name]
2021-04-06T17:47:30.612Z INFO - Waiting for response to warmup request for container [service_name]_2_d9625e76. Elapsed time = 15.7444228 sec
... lots of lines
2021-04-06T17:56:52.574Z INFO - Waiting for response to warmup request for container [service_name]_2_d9625e76. Elapsed time = 577.707016 sec
2021-04-06T17:57:14.909Z ERROR - Container [service_name]_2_d9625e76 for site [service_name] did not start within expected time limit. Elapsed time = 600.041979 sec
2021-04-06T17:57:14.916Z ERROR - Container [service_name]_2_d9625e76 didn't respond to HTTP pings on port: 3001, failing site start. See container logs for debugging.
我找不到更多要检查的日志或任何失败的原因。
WEBSITES_ENABLE_APP_SERVICE_STORAGE
对我的容器造成了什么影响?
我可以 bash 访问正在运行的 kudu 实例,但我什至找不到节点网站模块。
是否有任何日志可以让我查看失败的内容或 WEBSITES_ENABLE_APP_SERVICE_STORAGE
设置未考虑的任何内容?
【问题讨论】:
如何将映像部署到 Azure 应用服务? docker-compose 文件还是仅在 Azure 门户中? 您是否尝试通过设置 WEBSITES_CONTAINER_START_TIME_LIMIT = 1800 将容器等待时间调整为最大值? @CharlesXu 我使用 Dockerfile 构建容器,它被推送到 Azure 容器注册表,该注册表使用 webhook 触发应用服务中的部署 我的意思是第一次部署,你是在 Azure 门户中使用 docker-compose 文件创建应用服务吗?还是使用命令? @CharlesXu 我使用门户而不是 docker compose 文件创建了应用程序,我使用了“单个容器”并从容器注册表中选择了图像 【参考方案1】:首先,通过将环境变量WEBSITES_ENABLE_APP_SERVICE_STORAGE
设置为true
来启用持久化存储不会影响容器运行。这仅意味着您可以使用或不使用持久存储。
其次,如果将环境变量WEBSITES_ENABLE_APP_SERVICE_STORAGE
设置为true
,那么还需要配置挂载路径。到目前为止,据我所知,它只能在 docker-compose 文件中配置。 Here 就是一个例子。
如果您只想使用单个容器将其部署在 Azure 门户中。然后我建议您使用存储帐户。这样,您只需要在设置中配置映射即可。 Here 是步骤。
【讨论】:
我明白了,所以这需要使用类似volumes: $WEBAPP_STORAGE_HOME/site/wwwroot:/var/www/html
?此外,我首先尝试使用存储帐户,但有关设置的某些问题导致每月 140 万次“热 grs 写入”操作,我有一个关于此的支持案例开放
@bendataclear 是的,您需要像volumes: $WEBAPP_STORAGE_HOME/site/wwwroot:/var/www/html
一样设置音量。但您可以根据需要更改挂载路径。
经历了几次错误迭代,但最终它使用命令volumes: - $WEBAPP_STORAGE_HOME:/data
工作,感谢
不适合我,我使用单个容器
@QuentinMerlin 那么你只能在门户中挂载 Azure 文件共享。以上是关于Azure App Service 共享托管中断容器启动的主要内容,如果未能解决你的问题,请参考以下文章
Azure App Service-多语言/高可用/自动缩放的Web托管服务
如何获取Azure App Service的特定用户分配的托管服务标识的令牌?