【问题标题】:.NET Core Web API Application cannot connect to SQL server running on Docker.NET Core Web API 应用程序无法连接到在 Docker 上运行的 SQL 服务器
【发布时间】:2025-11-21 06:55:02
【问题描述】:

使用 MAC。错误(提供程序:TCP 提供程序,错误:40 - 无法打开与 SQL Server 的连接)。

Connection string "Data Source=localhost,1433;Initial Catalog=MyDatabase;Integrated Security=True;User id=sa;Password=MyPassword;MultipleActiveResultSets=true"

使用 .NET Core 3.1。 Web API 在容器中运行

数据库在 docker 容器上运行。映射的端口 1433:1433 能够从 Azure Data Studio 查询数据库。但是在尝试从 .net.core 应用程序连接时,它给了我上面的错误。

using System.Data.SqlClient;
SqlConnection connection = new SqlConnection(_connectionString);
connection.Open();

有什么想法吗?

编辑

因此,尝试使用容器的 ip "Server=172.17.0.2,1433;..." 但错误仍然存​​在。

EDIT2 - 解决方案

所以,docker-compose 解决了这个问题,插入了在 docker 中运行的 slq 的设置。

【问题讨论】:

  • .NET Core 应用程序是否也在容器中运行? docker ps -a 显示什么?
  • 是的,也在容器 0.0.0.0:22443->443/tcp
  • 你是如何建立这个链接的?基本上,localhost 并不意味着您认为它在容器中的含义。您需要能够按名称解析其他容器,并在您的 connstring 中引用它
  • 你可以使用 SSMS 连接到容器吗?
  • "Server=172.17.0.2,1433;..",所以,尝试使用容器的ip,但错误仍然存​​在......

标签: c# sql-server macos docker asp.net-core-3.1


【解决方案1】:

按名称引用容器。你可以这样做

sql-data:
   environment:
      - SA_PASSWORD=Pass@word
      - ACCEPT_EULA=Y
    ports:
      - "5433:1433" # Important: In a production environment, you should be using a managed service



- ConnectionStrings__DefaultConnection=Server=sql-data;Database=MyDatabase;User Id=sa;Password=MyPassword;MultipleActiveResultSets=true

【讨论】:

  • 你能引用你从哪里得到这些信息吗?另外,您在这里指的是 docker-compose.yml 文件吗?