Docker 容器中 sqlserver 的连接字符串

connection string for sqlserver in Docker container

我使用 Visual Studio 2017 for mac with dotnet Core 和 EF Core。在 Docker 容器中设置 mssql 图像后,我试图添加连接字符串但抛出连接错误。我尝试使用不同的选项,例如 ip address 、 container name 、 host name 等作为服务器名称,但其中 none 有效。

 "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.

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

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

如果使用本地主机,则错误为

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

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

"Default": "Server=localhost,1401; Database=ERPDb; User=sa; Password =******;"
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";

我今天遇到了这个问题,我使用单独的网络解决了它(而不是使用默认的 "bridge" 网络)。

  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地址的连接字符串的回答,这不是一个好的方法,因为这个地址可以动态改变,最好使用容器名称,作为主机名。

我通过使用SQL服务器容器IP地址解决了这个问题,方法是检查sql服务器容器的IP地址,如下所示

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

除了使用在团队环境中会出现问题的 IP 地址,您还可以使用 host.docker.internal 来解析您的主机 IP。

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