21

我按照本文中的说明在我的 Mac 上的 docker 容器中安装了 Sqlserver 。

我使用 Kitematic 运行容器并设法使用 Navicat Essentials for SQl Server 连接到服务器。服务器有四个数据库,我可以创建新数据库,但理想情况下,我想将现有数据库导入为 .bacpac。

这个答案的说明过去对我有用。我可以在容器中运行类似的东西吗?或者,更一般地说,有没有办法在容器中导入数据库?

4

4 回答 4

16

大家好!我们终于有了一个基于 dotnet core 并且跨平台的 sqlpackage 预览版!以下是下载链接。它们是常青链接,即每天都会上传一个新版本。这样,第二天就可以使用任何签入的错误修复。.zip 文件中包含预览 EULA。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 不支持构建和部署贡献者 需要迁移到支持 System.ComponentModel.Composition.dll 的 .NET Core 2.1 b。需要处理区分大小写的路径 不支持 SQL CLR UDT 类型。一个。这包括 SQL Server 类型 SqlGeography、SqlGeometry 和 SqlHierarchyId 不支持使用 Json 序列化的旧 .dacpac 和 .bacpac 文件 由于区分大小写的文件系统的问题,引用的 .dacpacs(例如 master.dacpac)可能无法解决

由于缺乏更好的方法,请在此处提供有关此 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 samuelmarks/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
于 2018-06-27T08:15:45.700 回答
11

看起来微软已经在 sqlpackage 上实现了对此的支持,并附有文档

您必须将 sqlpackage 添加到容器中。

你可以在这里下载。(可选,直接链接到这里的 linux 包,希望不会改变)

以下是从 Windows 机器上运行它的说明——显然这是让它工作的最低要求。请更改密码,并可能将其放入 docker-compose.yml 以供重复使用。

我将上面的包解压缩到一个文件夹'c:\sqlpackage'(我的 windows docker run 不允许相对路径),然后使用 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、用户名和密码,就像您在上面提供的一样,并查看“targetdbname”!这些主要是我为自己写的笔记,但我相信其他人也可以使用它们。

于 2019-09-04T05:16:17.970 回答
1

您可以使用 Microsoft 提供的免费 Azure Data Studio。安装后,安装 Microsoft 的扩展“SQL Server 管理包”。然后您可以轻松导入 bacpac 文件。

于 2021-09-23T01:34:54.867 回答
0

这似乎不是 LINUX 实现支持的功能。

请参阅此链接

于 2018-06-25T18:53:47.970 回答