为在Azure App Service Linux上运行的容器创建卷

问题描述

我们有一个SpringBoot应用程序,需要运行位于“ /secrets/app.keystore.jks”的密钥库文件

我们想在Azure App Service 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”

有人知道如何设置卷,以便容器中的应用可以访问主机上的文件吗?

解决方法

有两种方法可以实现您的目的。一种是将环境变量SELECT column FROM permissions WHERE table = ? and delete = ? and user_id = ? 设置为WEBSITES_ENABLE_APP_SERVICE_STORAGE,您可以像下面在docker-compose文件中那样将持久卷安装到您的容器中:

true

获取更多详细信息here

另一种方法是,您可以将Azure存储安装到容器中,然后将文件上传到存储中。请按照步骤here