Я использую 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 и танцевал вокруг своего компьютера в полнолуние. Ничего не сработало.
Есть идеи, как исправить это, не прибегая к перемещению файла после запуска контейнера?