gpt4 book ai didi

sql-server - 将数据库部署到 Docker 容器 microsoft/mssql-server-linux

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:47:03 25 4
gpt4 key购买 nike

我有一个在 Windows 上的 SQL Server (13.01) 上运行的数据库。我喜欢使用 SSDT 将它部署到 Linux 上的 Docker 容器。

我可以完美地连接到在 Docker 上运行的服务器并手动创建/删除数据库并使用数据。

问题是我无法发布它。我在 Powershell 上执行以下脚本

PS: SqlPackage.exe /Action:Publish /SourceFile:"d.dacpac" /TargetConnectionString:"server=containeraddress;database=thedatabase;user id=sa;password=thepassword;

并出现以下错误。

Unable to connect to master or target server 'the database'. You must have a user with the same password in master or target server 'the database'. (Microsoft.Data.Tools.Schema.Sql)

我在目标服务器和源服务器上拥有相同的用户名和密码。

有没有人遇到同样的问题,知道怎么解决的?

最佳答案

我将在此处发布此内容,因为大多数答案都涉及拥有现有的已编译 dacpac 文件,这可能并不总是可行的。我还没有在其他地方看到与我在这里建议的解决方案类似的想法。

考虑到您对 docker 的使用,并且如果您希望在容器内编译 visual studio 项目,考虑到容器基础操作系统和图像的某些组合可能无法使用 msbuild 创建 dacpac 文件。

您可以使用一系列基于 unix 的命令来恢复数据库,注意 visual studio 数据库项目通常只是一系列 SQL 文件,下面我展示了一个例子,我将 SQL 文件连接成单个文件并调用 sqlcmd 来运行脚本;

FROM mcr.microsoft.com/mssql/server
WORKDIR /init
ENV ACCEPT_EULA=Y
ENV MSSQL_SA_PASSWORD=MyPassword
EXPOSE 1433:1433
RUN apt-get update && apt-get install dos2unix
COPY /solution_folder/database/Tables/*.sql /init/
WORKDIR /database
RUN echo "CREATE DATABASE [database_name];\nGO\nUSE [database_name];\n” >> /database/create.sql
RUN for f in /init/*.sql; do dos2unix $f; cat $f >> /database/create.sql; echo "\nGO\n" >> /database/create.sql; done
RUN ( /opt/mssql/bin/sqlservr --accept-eula & ) | grep -q "Service Broker manager has started" && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘MyPassword’ -i /database/create.sql && pkill sqlservr

“dos2unix”的原因是在 visual studio 中创建的 SQL 文件具有独特的隐藏 cr/lf(和其他字符),linux 版本的 sqlcmd 无法成功解释并会导致错误(这有点奇怪这正是您希望跨平台数据库能够处理的事情)

此外,在最后的运行命令中,您必须临时启动 sql server 服务,否则您也会遇到错误;这有点变通,而且有点繁琐,我不确定 microsoft sql server linux 容器是否设计得足够好,足以完成像这样恢复数据库的简单任务,细微差别是构建和构建之间的区别运行一个容器并需要在这两个概念之间找到某种令人满意的中间地带才能使其正常工作。

这里给出的不是完整的恢复解决方案,它只处理项目文件中的表,尽管扩展到标量函数和存储过程应该是微不足道的。

关于sql-server - 将数据库部署到 Docker 容器 microsoft/mssql-server-linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com