Серверный контейнер ACI sql удаляет базы данных после перезапуска - PullRequest
0 голосов
/ 14 апреля 2020

У меня работает sql контейнер сервера с сохранением файлового хранилища в Azure контейнере экземпляра (ACI).

К серверу sql подключена некоторая база данных, расположенная в хранилищах файлов, и она работает отлично, пока контейнер не перезагрузится.

После перезапуска вся база данных ушла с сервера sql, и мне пришлось снова присоединить всю базу данных вручную.

Возможно ли автоматически c снова подключить все базы данных после перезапуска?

Я пробовал с таким шаблоном

"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"
                    ],

Не работает.

Но если я выполню ту же команду внутри контейнера, она будет работать правильно.

Кто-нибудь, кто может дать направление?

Заранее спасибо

Микаэль

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Для проблемы, с которой вы столкнулись, есть две концепции экземпляра контейнера Azure, которые вам необходимо знать.

Одна из них заключается в том, что когда вы останавливаете и запускаете экземпляр контейнера, он начинает новое развертывание с та же конфигурация контейнера. Таким образом, он не сохранит данные в старом экземпляре контейнера, если вы не настроите постоянное хранилище самостоятельно. Вы можете узнать подробности об остановке и запуске контейнера .

Другой пример: экземпляр контейнера Azure не поддерживает команду, содержащую более одного слова. Например, он может запустить команду ls, но не поддерживает команду ls -al. См. Более подробную информацию о Ограничение .

Таким образом, решение заключается в том, чтобы создать новое изображение, чтобы поместить команду внутри изображения. И чтобы сохранить данные в экземпляре контейнера, вам нужно смонтировать Azure Общий файловый ресурс в экземпляр контейнера . Будьте осторожны, если вы смонтируете общий ресурс в каталог контейнера, в котором существуют файлы или каталоги, эти файлы или каталоги будут скрыты при монтировании и не будут доступны во время работы контейнера. Таким образом, точка монтирования должна быть каталогом, в котором нет файлов, которые могут быть полезны, или самостоятельно создавать новый для сохранения данных.

0 голосов
/ 14 апреля 2020

Вам необходимо сохранить базу данных в томе. Вот полезная ссылка:

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

...