Azure WebApps + Azure File 与多容器共享

Posted

技术标签:

【中文标题】Azure WebApps + Azure File 与多容器共享【英文标题】:Azure WebApps + Azure File share with multicontainers 【发布时间】:2021-06-18 03:42:35 【问题描述】:

我一直在尝试使用我的 API 设置我的 Postgresql 数据库。我的 API 在 Azure WebApps 上,数据库在 Azure 文件共享上。

以下是我的 docker compose 文件

version: '3.3'

services:
   db:
     image: postgres
     volumes:
       - db_path:/var/lib/postgresql/data
     restart: always
     environment:
        POSTGRES_USER: dbuser
        POSTGRES_PASSWORD: dbuser's_password
        POSTGRES_DB: db_1

   api:
     depends_on:
       - db
     image: <my registry>.azurecr.io/api:latest
     ports:
       - "80:80"
     restart: always

我的 WebApp -> 配置 -> 路径映射如下

它确实已部署,但我在 Azure 文件共享的位置找不到我的数据库文件。现在在重新部署时,我可以在Log Stream 中看到以下内容。

谁能告诉我我哪里做错了?为什么我的数据库不在我的 Azure 文件共享中?

提前致谢

编辑

连同查尔斯的建议如下:

我还更新了我的 docker-compose.yml 文件,如下所示。我所做的更改是保持我的卷名与映射名相同,并添加了driver_opts

version: '3.8'

services:
   db:
     image: mysql
     volumes:
       - mysql:/var/lib/mysql
     environment:
       - MYSQL_DATABASE=dbName
       - MYSQL_ROOT_PASSWORD=MyRootPassword!
       - MYSQL_USER=dbUser_1
       - MYSQL_PASSWORD=dbUser_1'sPassword
     restart: always

   api:
     depends_on:
       - db
     entrypoint: ["./wait_for.sh", "db:3306", "-t", "3600", "--", "execute", "api"] #waiting very long enough to set the db server up and running
     image: <my registry's url>/api:latest
     ports:
       - "80:80"
     restart: always

volumes:
  mysql:
        driver: azure_file
        driver_opts:
          share_name: Azure_Share_Name
          storage_account_name: Azure_Storage_Account_Name
          storageaccountkey: Azure_Key

【问题讨论】:

关于这个问题的任何更新?它解决了你的问题吗?如果它适合你,请接受它。 【参考方案1】:

这是一个已知问题。使用带有 Azure 文件共享的持久卷进行装载时,装载路径将具有 root 所有者和组,并且您无法更改它。所以如果应用程序需要特殊用户的路径,像这个问题,Postgresql需要挂载路径/var/lib/postgresql/data拥有postgres所有者,那么它就无法实现。

请注意,您提供的路径映射屏幕截图显示了错误的挂载路径以及 YAML 文件中的配置。这可能是一个错误。

【讨论】:

感谢查尔斯的回答,但没有奏效。 @Kishan 现在情况如何?您是否收到另一个错误或相同的错误?你的意思是没有工作?我的回答显示了您收到错误但无法解决的原因。 我仍处于测试的早期阶段,但当我将数据库切换到 MSSql Server 时,您的解决方案有效,但不适用于 MySQLPostgres @Kishan 使用文件共享挂载的所有 Web 应用程序容器都是这样工作的。所以如果你说它不适用于 MySQL 和 Postgres,你得到的错误是什么? @Kishan 这个问题有什么更新吗?它解决了你的问题吗?如果它适合你,请接受它。

以上是关于Azure WebApps + Azure File 与多容器共享的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure Blob 与 Azure 网站结合使用

AZURE快速创建WEB服务器。

Service Fabric 微服务与 Azure 云服务/Web 应用程序集合的优势

定制化Azure站点Java运行环境

Azure Storage Blob文件名区分大小写

Azure:Web 应用程序 - 从已部署的 nodejs 应用程序中列出应用程序设置