为在 Azure App Service Linux 上运行的容器创建卷
Posted
技术标签:
【中文标题】为在 Azure App Service Linux 上运行的容器创建卷【英文标题】:Create volume for container running on Azure App Service Linux 【发布时间】:2021-01-09 04:08:06 【问题描述】:我们有一个 SpringBoot 应用程序,它需要一个位于“/secrets/app.keystore.jks”的密钥库文件才能运行。
我们希望在 Azure 应用服务 Linux 实例上的容器中运行应用。并且出于安全原因,我们不想在容器本身中包含“/secrets/app.keystore.jks”文件。相反,我们设法将文件上传到应用服务上的“/home/site/wwwroot/secrets/”文件夹。
我们使用下面的命令在应用服务上启动容器
docker run -d myacr.azurecr.io/myAPp:latest -p 80:80 --name myApp
-e WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE -v /home/site/wwwroot/secrets:/secrets
在应用服务的日志中,我们有错误:
java.lang.IllegalStateException: java.io.IOException: 无法打开 /secrets/app.keystore.jks 作为文件、类路径资源或 URL。
在我看来,音量未设置,应用无法访问文件“/secrets/app.keystore.jks”
有谁知道如何设置卷以便容器中的应用可以访问主机上的文件?
【问题讨论】:
【参考方案1】:有两种方法可以实现您的目的。一种是将环境变量WEBSITES_ENABLE_APP_SERVICE_STORAGE
设置为true
,然后您可以将持久卷安装到您的容器中,如下面的 docker-compose 文件:
volumes:
- $WEBAPP_STORAGE_HOME/site/wwwroot/secrets:/secrets
获取更多详情here。
另一种方法是,您可以将 Azure 存储装载到您的容器并将文件上传到存储。按照步骤here.
【讨论】:
嗨@Charles Xu,WEBSITES_ENABLE_APP_SERVICE_STORAGE 设置为 TRUE。也许我需要在我的启动命令中使用“-v $WEBAPP_STORAGE_HOME/site/wwwroot/secrets:/secrets”。或者我会尝试使用 docker-compose 文件。即使我只运行一个容器。 @sean717 通过 docker-compose 文件只运行一个容器就可以了。或者你可以使用第二种方式。直接在 Azure 门户中设置。 最终,Azure 存储方法奏效了……我没有尝试使用 docker-compose 文件。 当我为 docker 映像“nopcommerceteam/nopcommerce”尝试 Azure 存储方法时,我收到了这条消息“找不到任何已安装的 .NET Core SDK”以上是关于为在 Azure App Service Linux 上运行的容器创建卷的主要内容,如果未能解决你的问题,请参考以下文章
Azure SQL - 从 Azure 文件而不是 Blob 批量插入
Azure App Service 与 Azure Service Fabric [关闭]
Python app in Azure App Service on Linux初探