[ACI sql服务器容器在重新启动后删除数据库

问题描述 投票:0回答:2

我已在Azure实例容器(ACI)中运行具有文件存储持久性的sql服务器容器。

sql服务器在文件存储中连接了一些数据库,并且在容器重新启动之前,它可以正常工作。

重新启动后,所有数据库都从sql server中消失了,我不得不再次手动附加所有数据库。

重启后是否可以自动附加所有数据库?

我已经尝试过使用这样的模板

"resources": [
    {
        "type": "Microsoft.ContainerInstance/containerGroups",
        "apiVersion": "2018-10-01",
        "name": "[parameters('containerGroups_mssql_2019_name')]",
        "location": "WestEurope",
        "properties": {
            "containers": [
                {
                    "name": "[parameters('containerGroups_mssql_2019_name')]",
                 "properties": {
                    "command": [
                       "/opt/mssql-tools/bin/sqlcmd",
                       "-l",
                       "60",
                       "-U",
                       "SA",
                       "-P",
                       "!thisWillMakeMyDayEveryDayIn2019",
                       "-i",
                       "/mnt/mydata/scripts/attach_all_databases.sql"
                    ],

它不起作用。

但是如果我在容器内执行相同的命令,它将正常工作。

谁能提供指示?

提前谢谢您

Mikael

sql-server azure azure-container-service azure-container-instances
2个回答
0
投票

您需要将数据库持久存储在一个卷中。这是一个有用的链接:

https://docs.microsoft.com/en-us/azure/container-instances/container-instances-volume-azure-files


0
投票

对于遇到的问题,您需要了解Azure容器实例的两个概念。

一个是,当您停止并启动容器实例时,它将以相同的容器配置开始新的部署。因此,如果您不自行设置持久性存储,它将不会将数据持久化在旧容器实例中。您可以了解有关stop and start the container的详细信息。

[另一个是Azure容器实例不支持该命令包含多个单词。例如,它可以运行命令ls,但不支持命令ls -al。查看有关Restriction的更多详细信息。

因此解决方案是创建一个新图像以将命令放入图像中。要将数据持久保存在容器实例中,您需要mount the Azure File share to the container instance。请注意,如果将共享装入存在文件或目录的容器目录中,则这些文件或目录会被装入遮挡,并且在容器运行时不可访问。因此,安装点应该是一个不包含有用文件的目录,或者自己创建一个新文件以持久保存数据。

© www.soinside.com 2019 - 2024. All rights reserved.