Как импортировать .bacpac в docker Sqlserver?

Я установил Sqlserver на свой Mac в док-контейнере, следуя инструкциям из этой статьи.

Я запустил контейнер с Kitematic и смог подключиться к серверу, используя Navicat Essentials для SQl Server. На сервере есть четыре базы данных, и я могу создавать новые, но в идеале я хотел бы импортировать существующую базу данных как .bacpac.

Инструкции из этого ответа были полезны для меня в прошлом. Могу ли я запустить нечто подобное в контейнере? Или, в более общем смысле, есть ли способ импортировать базу данных в контейнер?

Ответ 1

Всем привет! Наконец, у нас есть готовый предварительный просмотр для sqlpackage, который построен на ядре dotnet и является кроссплатформенным! Ниже приведены ссылки для скачивания с. Это вечнозеленые ссылки, то есть каждый день выкладывается новая сборка. Таким образом, любое исправленное исправление доступно на следующий день. В файл .zip включено предварительное лицензионное соглашение. linux https://go.microsoft.com/fwlink/?linkid=873926 osx https://go.microsoft.com/fwlink/?linkid=873927 windows https://go.microsoft.com/fwlink/?linkid= 873928 Примечания к выпуску:

Параметр /p: CommandTimeout жестко задан для 120 Build, и участники развертывания не поддерживаются a. Необходимо перейти на .NET Core 2.1, где поддерживается System.ComponentModel.Composition.dll b. Необходимость обрабатывать регистрозависимые пути. Типы SQL CLR UDT не поддерживаются. а. Это включает в себя типы SQL Server SqlGeography, SqlGeometry и & SqlHierarchyId. Старые файлы .dacpac и .bacpac, использующие сериализацию Json, не поддерживаются. Ссылки.

В случае отсутствия лучшего метода, пожалуйста, оставьте свой отзыв об этой проблеме на GitHub.

Спасибо, что попробовали и сообщили нам, как это происходит!

https://github.com/Microsoft/mssql-docker/issues/135#issuecomment-389245587

РЕДАКТИРОВАТЬ: Я сделал вам изображение Docker для этого

https://hub.docker.com/r/samuelmarks/mssql-server-fts-sqlpackage-linux/

Пример настройки контейнера, создания базы данных, копирования файла .bacpac и импорта его в вышеупомянутую базу данных:

docker run -d -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 --name sqlfts0 mssql-server-fts-sqlpackage-linux
docker exec -it sqlfts0 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourStrong!Passw0rd>' -Q 'CREATE DATABASE MyDb0'
docker cp ~/Downloads/foo.bacpac sqlfts0:/opt/downloads/foo.bacpac
docker exec -it sqlfts0 dotnet /opt/sqlpackage/sqlpackage.dll /tsn:localhost /tu:SA /tp:'<YourStrong!Passw0rd>' /A:Import /tdn:MyDb0 /sf:foo.bacpac

Ответ 2

Похоже, что Microsoft реализовала поддержку этого в sqlpackage, с документацией!

Вам нужно будет добавить sqlpackage в ваш контейнер.

Вы можете скачать его здесь. (опционально, прямая ссылка на пакет linux здесь, надеюсь, не изменится)

Ниже приведены инструкции для запуска этого с Windows-машины - очевидно, это минимум, чтобы заставить его работать. Пожалуйста, измените пароли и, вероятно, поместите их в docker-compose.yml для повторного использования.

Я распаковываю вышеупомянутый пакет в папку "c:\sqlpackage" (мой запуск Windows Docker не разрешает относительные пути), а затем монтирую его в контейнер с bacpac, например:

docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Asdf1234" -v c:\sqlpackage:/opt/sqlpackage -v c:\yourdb.bacpac:/tmp/yourdb.bacpac -p 1433:1433 --name mssql-server-example microsoft/mssql-server-linux:2017-latest

вот что может * альтернативно запустить пользователь * nix:

docker run -d -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Asdf1234' -v ./sqlpackage:/opt/sqlpackage -v ./yourdb.bacpac:/tmp/yourdb.bacpac -p 1433:1433 --name mssql-server-example microsoft/mssql-server-linux:2017-latest

и, наконец, присоедините его к контейнеру и запустите:

/opt/sqlpackage/sqlpackage /a:Import /tsn:. /tdn:targetdbname /tu:sa /tp:Asdf1234 /sf:/tmp/yourdb.bacpac

После этого вы сможете подключиться к SSMS к localhost, имени пользователя и паролю, как вы их указали выше, и увидите "targettdbname"! В основном это заметки, которые я написал для себя, но я уверен, что другие тоже могут их использовать.

Ответ 3

Это не поддерживается с реализацией LINUX, кажется.

Смотрите эту ссылку.