Docker容器中sqlserver的连接字符串

时间:2017-08-16 11:17:54

标签: macos docker connection-string asp.net-core-1.1

我正在使用Visual Studio 2017 for mac与dotnet Core和EF Core。在Docker容器中设置mssql映像后,我试图添加连接字符串但抛出连接错误。我尝试使用不同的选项,如IP地址,容器名称,主机名等作为服务器名称,但没有一个工作。

 "Default": "Server=172.17.0.2; Database=ERPDb; User=sa; Password =******;"

包含容器名称

 "Default": "Server=ecstatic_hermann; Database=ERPDb; User=sa; Password=******;"

主机名:

 "Default": "Server=f45840a59623; Database=ERPDb; User=sa; Password=******;"

通过在终端中使用localhost连接成功连接

$ mssql -s localhost -p Technocrat123
Connecting to localhost...done

sql-cli version 0.6.2
Enter ".help" for usage hints.

但是在运行应用程序时连接失败。

感谢任何帮助。提前谢谢。

如果使用localhost,那么错误是

Login failed for user ''. Reason: An attempt to login using SQL authentication failed. Server is configured for Integrated authentication only.

6 个答案:

答案 0 :(得分:13)

我刚写了一篇博文。看看richminchuk.io。否则:

sudo docker pull microsoft/mssql-server-linux:2017-latest
docker run \
   -e 'ACCEPT_EULA=Y' \
   -e 'MSSQL_SA_PASSWORD=YourSTRONG!Passw0rd' \
   -p 1401:1433 \
   -n sql1 \
   -d microsoft/mssql-server-linux:2017-latest

然后,

private static string _connStr = @"
   Server=127.0.0.1,1401;
   Database=Master;
   User Id=SA;
   Password=YourSTRONG!Passw0rd
";

答案 1 :(得分:7)

您的服务器名称很可能是localhost和端口1401(这是Docker容器设置的默认设置)。因此,您需要使用以下连接字符串:

"Default": "Server=localhost,1401; Database=ERPDb; User=sa; Password =******;"

答案 2 :(得分:0)

我今天遇到了这个问题,我使用了一个单独的网络(而不是使用默认的“桥接”网络)解决了这个问题。

  1. docker network create test_network

  2. docker container run -p 1433:1433 -d --name mssql -v mssql_data:/var/opt/mssql -e SA_PASSWORD=********** -e ACCEPT_EULA=Y --network=test_network microsoft/mssql-server-linux

  3. docker container run -p 5000:80 --rm -e ASPNETCORE_ENVIRONMENT=Development --name aspnetcore --network=test_network aspnetcore-image

我也有这样的连接字符串:

Server=mssql;Database=master;User=sa;Password=**********;

关于先前有关IP地址的连接字符串的答案,这不是一个好方法,因为可以动态更改此地址,因此最好将容器名称用作主机名。

答案 3 :(得分:0)

我遇到了这个问题,并使用以下代码行解决了该问题:

// appsettings.json

{
"ConnectionStrings": {
 "DefaultConnection": "Server=localhost;User Id = SA;Password=********;Initial Catalog = myMacDb;"
...

其中********是我的SQL密码。

答案 4 :(得分:0)

我通过使用SQL Server 容器IP地址来解决它,方法是检查sql server容器的IP地址,如下所示

docker inspect -f "{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}" <ContainerID | ContainerName>

答案 5 :(得分:0)

您可以使用 host.docker.internal 解析为您的主机IP,而不是使用IP地址(在团队环境中会出现问题)。

Data Source=host.docker.internal,1433;Initial Catalog=MyDB;User ID=MyUser;Password=MyPassword