提问人:Manthan 提问时间:11/16/2023 更新时间:11/16/2023 访问量:22
Azure 应用服务多容器卷不起作用 [已关闭]
Azure App Service multi containers volume not working [closed]
问:
我正在尝试在 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_STORAGE
true
/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实例。
答: 暂无答案
评论