我按照this article的说明在我的Mac上的docker容器中安装了Sqlserver。
我使用SQl运行容器,并使用Navicat Essentials for with连接到服务器。服务器有四个数据库,我可以创建新的数据库,但理想情况下,我希望导入一个现有的数据库作为.bacpac。
from this answer的说明在过去对我很有用。我可以在容器中运行类似的东西吗?或者,更一般地说,有没有一种方法可以在容器中导入数据库?
发布于 2018-06-27 16:15:46
大家好!我们终于有了sqlpackage的预览版,它是基于dotnet核心构建的,并且是跨平台的!下面是可以下载的链接。它们是常青树链接,即每天都会有新的构建被上传。这样,任何签入的bug修复程序都可以在第二天获得。包含在.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构建和部署贡献者不支持a.需要迁移到支持System.ComponentModel.Composition.dll的.NET核心2.1 b.需要处理区分大小写的路径不支持SQL类型。a.这包括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
发布于 2019-09-04 13:16:18
看起来微软已经在sqlpackage上实现了对此的支持,with documentation!
您必须将sqlpackage添加到您的容器中。
You can download it here. (可选,直接链接到linux包here,希望不会改变)
以下是在windows机器上运行该程序的说明--显然,这是使其正常工作的最低要求。请更改密码,并可能将其放入docker-compose.yml中以供重复使用。
我将上面的包解压到一个文件夹'c:\sqlpackage‘中(我的windows docker run不允许使用相对路径),然后使用将其挂载到容器中,如下所示:
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'!这些大多是我为自己写的笔记,但我相信其他人也可以使用它们。
发布于 2021-09-23 01:34:55
您可以使用Microsoft提供的免费Azure Data Studio。安装完成后,请安装Microsoft提供的扩展"Admin Pack for SQL Server“。然后,您可以轻松地导入bacpac文件。
https://stackoverflow.com/questions/40685375
复制相似问题