Azure 应用服务多容器卷不起作用 [已关闭]

Azure App Service multi containers volume not working [closed]

提问人:Manthan 提问时间:11/16/2023 更新时间:11/16/2023 访问量:22

问:


这个问题似乎与特定的编程问题、软件算法或程序员主要使用的软件工具无关。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释在哪里可以回答该问题。

3天前关闭。

我正在尝试在 Azure 应用服务上使用 MySQL 数据库运行 CalDAV 服务器(贝加尔湖)。我的样子是这样的,docker-compose.yml

version: "3.4"
services:
  mysqldb:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: kU47k9PpjU5A
      MYSQL_DATABASE: baikal
      MYSQL_USER: baikal
      MYSQL_PASSWORD: PY74bSs72fkT
    volumes:
      - ${WEBAPP_STORAGE_HOME}/site/wwwroot/mysql:/var/www/baikal/config

  baikal:
    image: ckulka/baikal:nginx
    container_name: baikal
    restart: always
    ports:
    # These ports are in format <host-port>:<container-port>
      - 80:80

    volumes:
      - ${WEBAPP_STORAGE_HOME}/site/wwwroot/specific:/var/www/baikal/Specific
      - ${WEBAPP_STORAGE_HOME}/site/wwwroot/config:/var/www/baikal/config

我已将设置设置为 。首次运行时,一切正常,文件夹在目录下创建,我能够与应用程序进行交互。WEBSITES_ENABLE_APP_SERVICE_STORAGEtrue/home/site/wwwroot/

但是当我停止/启动(或重新启动)应用程序时,贝加尔湖不再能够连接到MySQL。我检查了MySQL容器日志,没有任何问题。甚至检查了贝加尔湖的日志,但也没有发现任何错误。这个问题并不特定于贝加尔湖,因为我无法使用 Docker Desktop 在本地复制该问题。

我认为问题可能是因为多个容器/服务想要访问持久的本地文件 - 但我不确定这一点。我检查了 Azure 的官方多容器示例(Wordpress + MySQL),但他们只使用 MySQL 的持久性本地文件(只有 1 个容器/服务)

替代问题

贝加尔湖可以选择使用sqlite作为后端存储,而不是MySQL。选择此选项时,它甚至无法完成初始数据库设置。经过进一步调查,我注意到它无法写入文件(它有 0 个字节)——所以这可能是文件夹/文件所有权/权限问题。但我在 azure 应用服务上运行了其他容器化应用程序,这些应用程序能够毫无问题地写入本地文件。我无法使用 Docker Desktop 在本地复制此问题。db.sqlite

解决 方案

命名卷

我尝试使用命名卷而不是本地路径,这些路径按预期工作并在应用程序重新启动后幸存下来。但是,此处询问的 Azure 应用服务中的命名卷还有其他问题 - Azure 应用服务容器,命名卷存储在哪里?

Azure 文件共享装载

我正在使用免费的应用程序服务计划,其中包含 1GB 的存储空间。我想利用此存储,而不是装载 azure 文件共享。由于上述原因,我还没有尝试过容器的 azure 文件共享装载。

外部 MySQL 实例

我向贝加尔湖指出了一个外部(可访问互联网)托管的MySQL实例,它运行良好。容器在应用服务重新启动后幸存下来,并按预期工作。但我想将MySQL用作在同一应用程序服务中与贝加尔湖一起运行的挎斗容器 - 这更易于管理,因为每个应用程序都有自己的专用MySQL实例。

docker-compose azure-web-app-service

评论


答: 暂无答案