我按照this article的说明在我的Mac上的docker容器中安装了Sqlserver。
我使用Kitematic运行容器,并设法使用Navicat Essentials for SQl Server连接到服务器。 服务器有四个数据库,我可以创建新数据库,但理想情况下,我想将现有数据库导入为.bacpac。
过去,from this answer说明对我有用。我可以在容器内运行类似的东西吗?或者,更一般地说,有没有办法在容器中导入数据库?
答案 0 :(得分:3)
大家好!我们终于可以在基于dotnet核心且跨平台的sqlpackage预览版上使用了!以下是下载链接。它们是常绿的链接,即每天都上传新的版本。这样,第二天就可以使用所有已检入的错误修复程序。 .zip文件中包含预览EULA。 linux https://go.microsoft.com/fwlink/?linkid=873926 操作系统 https://go.microsoft.com/fwlink/?linkid=873927 视窗 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 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
答案 1 :(得分:2)
Microsoft似乎已在sqlpackage with documentation上实现了对此的支持!
您将必须将sqlpackage添加到您的容器中。
You can download it here.(可选,直接链接到Linux软件包here,希望不会改变)
以下是在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”!这些主要是我为自己写的笔记,但我相信其他人也可以使用它们。
答案 2 :(得分:0)
这似乎不是LINUX实现所支持的功能。
请参阅此link。