SQL Сервер не может найти файл резервной копии в контейнере Docker - PullRequest
0 голосов
/ 27 мая 2020

Я использую Docker на Windows для запуска сервера Microsoft SQL внутри контейнера Linux. За пару недель до go я просто подключил папку на своем хост-компьютере в контейнер (через файл docker -compose) и выполнил команду RESTORE на SQL сервере, чтобы восстановить резервную копию базы данных из файл внутри смонтированной папки.

Это docker -compose.yml

version: '3'
services:
    sqlserver:
        image: "mcr.microsoft.com/mssql/server:latest"
        environment:
            - "ACCEPT_EULA=Y"
            - "SA_PASSWORD=********"
            - "MSSQL_COLLATION=Latin1_General_CI_AS"
            - "TZ=Europe/Berlin"

        ports:
            - 14333:1433
        networks:
            - ssnet
        volumes:
            - ./mssql/backup:/var/opt/mssql/backup
networks:
    ssnet:
        driver: bridge

UPDATE

И это команда RESTORE

IF(db_id(N'MyDatabase') IS NULL)
BEGIN
RESTORE DATABASE [MyDatabase] FROM DISK='/var/opt/mssql/backup/MyDatabase.bak' WITH MOVE 'MyDatabase_Data' TO '/var/opt/mssql/data/MyDatabase.mdf', MOVE 'MyDatabase_Log' TO '/var/opt/mssql/data/MyDatabase_1.ldf';
END

/ UPDATE


Это сработало. Пока этого не произошло. Папка хоста по-прежнему смонтирована под /var/opt/mssql/backup/, и когда я открываю оболочку в контейнере, я вижу файл там, где он должен быть. Разрешения кажутся нормальными (rwx для root, rx для всех остальных), но SQL Сервер настаивает на том, что не может найти файл (ни с помощью команды RESTORE, ни в диалоговом окне SQL Server Management Studio), хотя он смонтированную папку можно увидеть вполне нормально.

Я думал, что виновником было недавнее обновление Docker, поскольку в их примечаниях к выпуску предполагалось, что были определенные изменения в способе монтирования томов на Windows, но переход на более раннюю версию не исправил эта проблема. Когда я перемещаю файл резервной копии из смонтированной папки в другое место в файловой системе контейнера (например, /var/opt/mssql/) SQL Сервер снова может увидеть файл. Разрешения идентичны.

Я уже удалил контейнер (несколько раз), удалил Docker и танцевал вокруг своего компьютера в полнолуние. Ничего не сработало.

Есть идеи, как исправить это, не прибегая к перемещению файла после запуска контейнера?

...