我已在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
您需要将数据库持久存储在一个卷中。这是一个有用的链接:
https://docs.microsoft.com/en-us/azure/container-instances/container-instances-volume-azure-files
对于遇到的问题,您需要了解Azure容器实例的两个概念。
一个是,当您停止并启动容器实例时,它将以相同的容器配置开始新的部署。因此,如果您不自行设置持久性存储,它将不会将数据持久化在旧容器实例中。您可以了解有关stop and start the container的详细信息。
[另一个是Azure容器实例不支持该命令包含多个单词。例如,它可以运行命令ls
,但不支持命令ls -al
。查看有关Restriction的更多详细信息。
因此解决方案是创建一个新图像以将命令放入图像中。要将数据持久保存在容器实例中,您需要mount the Azure File share to the container instance。请注意,如果将共享装入存在文件或目录的容器目录中,则这些文件或目录会被装入遮挡,并且在容器运行时不可访问。因此,安装点应该是一个不包含有用文件的目录,或者自己创建一个新文件以持久保存数据。