Azure 应用服务使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 400
Posted 云中一盏灯,路边形影重
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure 应用服务使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 400相关的知识,希望对你有一定的参考价值。
问题描述
使用Docker Compose方式合并多个镜像(Images)文件,然后部署到App Service中,结果失败。报错 Linux Version 太长,不能超过4000个字符。
错误消息:
"code":"DeploymentFailed",
"message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-deployment-operations for usage details.",
"details":[
"message":"Linux Version is too long. It cannot be more than 4000 characters."
]
问题解答
这是因为App Service 会把 Docker compose.yml 文件中的内容以Base64格式编码后,赋值给Linux Version。而Linux Version的长度限制为4000个, 这是App Service For Linux平台限制,无法修改。
代替方案
可以使用方案有:
1)精简 Docker Compose.yaml 文件,把其中App Service不支持的指令或无关紧要的内容移除。App Service不支持的选项有:https://docs.azure.cn/zh-cn/app-service/configure-custom-container?pivots=container-linux&tabs=debian#docker-compose-options
2)使用 AKS(Azure Kubernetes Service) 服务 : https://docs.azure.cn/zh-cn/aks/tutorial-kubernetes-prepare-app
3)使用 ACI (Azure Container Instance) 服务 : https://learn.microsoft.com/en-us/azure/container-instances/tutorial-docker-compose
参考资料
Create Docker Comose App: https://learn.microsoft.com/en-us/azure/app-service/quickstart-multi-container#create-a-docker-compose-app
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
如何将本地 Docker 映像部署到 Azure 应用服务?
【中文标题】如何将本地 Docker 映像部署到 Azure 应用服务?【英文标题】:How to Deploy local Docker image to Azure app services? 【发布时间】:2021-12-06 06:00:31 【问题描述】:在不使用任何 Docker 注册表集成的情况下创建了 Azure 应用服务 Web 应用。
我想实现以下目标。
1] 在我的 Linux 机器上创建、标记图像 2] 使用以下方式将本地 Docker 映像部署到应用服务 Web 应用
az webapp config container set --name springboot-docker-helloworld-app --resource-group SpringBoot --docker-custom-image-name org/dockerspringtboot-metinv:latest
但它不起作用。
是否可以将本地 Docker 映像部署到 Azure 应用服务 Web 应用?
【问题讨论】:
【参考方案1】:您需要将容器映像推送到 Azure 容器注册表,您的 Azure Web 应用可以从中提取映像。
您可以使用 Azure CLI 执行此操作,步骤如下:
$ az acr create --resource-group your_rg \
--name yourAcrName --sku Basic
# login to the container registry locally
$ az acr login --name yourAcrName
# update the container registry to use admin-enabled
# https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli#admin-account
$ az acr update -n yourAcrName --admin-enabled true
# tag your local image to the container registry
$ docker tag dockerspringtboot-metinv:latest yourAcrName/dockerspringtboot-metinv:latest
# push image to your container registry
$ docker push yourAcrName/dockerspringtboot-metinv:latest
然后您可以创建应用服务计划并部署指定使用您的容器注册表的 Web 应用。
$ az appservice plan create -g your-rg \
-n your-app-plan \
--sku B1 --is-linux
# deploy your container as an app in the created App Service plan
$ az webapp create -g your-rg \
-p your-app-plan \
-n dockerspringtboot \
-i yourAcrName/dockerspringtboot-metinv:latest
【讨论】:
谢谢。是否可以将本地 Docker 映像部署到 Azure 应用服务 Web 应用?我不想从任何容器注册表中提取/使用任何容器注册表,例如 ACR、Docker 集线器等。 因为你的 webapp 会停止和启动,所以它需要一个注册表,每次都可以从中拉取容器镜像。这意味着你不能只是将你的镜像本地推送到应用服务并让它继续运行,你必须在 Azure 上或通过 DockerHub 创建一个注册表。您是否有不想使用容器注册表的特殊原因? Azure 允许您创建一个私有注册表,使您的图像保持私有。 谢谢。我想避免依赖特定的注册表。从我的 devops 管道中,我想从任何注册表所需的注册表中提取我的构建代理,并将该本地副本直接推送到 App 服务... 那么我认为不可能部署这样的 Azure 应用服务应用程序。您也许可以在没有注册表的情况下运行 azure 容器实例(请参阅此example using docker CLI)。以上是关于Azure 应用服务使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 400的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu18.04在线安装dockernvidia-docker2与docker-compos
如何将本地 Docker 映像部署到 Azure 应用服务?
使用 docker 和 azure 容器注册表在 azure kubernetes 中部署 Angular 和 Spring Boot 应用程序