.Net Core Docker Image在Docker中运行时无法访问数据库

时间:2019-03-15 14:33:09

标签: c# docker

我有一个dotnet核心应用程序尝试访问数据库,当我在Visual Studio中运行它时,它工作正常(可能是由于我的域身份验证),但是当我尝试构建docker映像并使用{{1 }}

我收到此错误,但我真的不明白为什么? 有谁知道我该如何解决?

连接字符串如下所示:docker run -it --rm -p 8080:80 --name console console

当我通过Visual Studio运行时,它可以在我的机器上本地正常工作。

错误:

  

System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或未访问服务器       sible。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:SQL网络接口,错误:0-访问被拒绝。)---> System.Com       ponentModel.Win32Exception(5):访问被拒绝

2 个答案:

答案 0 :(得分:1)

您的docker正在运行的容器不了解连接字符串

localhost

localhost\MyInstance

您需要这样的东西:

  

Data Source = host.docker.internal:1433; DatabaseName = MyDatabase;

您可能还需要使用sql身份验证,才能“从docker”跳转到本地计算机。

您必须将正在运行的docker映像视为另一台机器,因此,如果您具有localhost \ MyInstance sql服务器,则还必须打开与其的远程tcp连接。

一般经验法则。

在计算机上运行的容器...不像本地代码。.诸如db-server,local-sftp等。

答案 1 :(得分:0)

该错误消息已经为您提供了很好的提示。您在名为“控制台”的容器中产生的客户端应用程序与数据库实例不在同一个网络中,或者您的MSSQL服务器正在拒绝远程连接。

请参阅Matt。 G的comment如何配置MSSQL以接受来自远程客户端的连接。

因为执行docker run时未指定网络,所以容器通过网桥网络接口隐式连接到主机。您可以使用以下方法检查正在运行的容器的IP地址:

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name>
# more verbose:
# docker inspect <container_name>

您还应该仔细检查您的连接字符串,以实际指向托管数据库的系统。就您而言,可能是您的物理计算机/ docker主机的IP地址。