我有一个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):访问被拒绝
答案 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地址。