我遇到的问题是,当我使用 Docker 启动 .NET Core 项目时,无法找到在本地(而不是作为容器)运行的 Microsoft SQL Server。Swagger UI 的响应如下所示。
TypeError:NetworkError when attempting to fetch resource.
这是我的连接。
这是我的连接字符串
服务器=host.docker.internal,1433;数据库=myDb;用户 ID=myUser;密码=myPassword;加密=False;MultipleActiveResultSets=True;TrustServerCertificate=True;
我已为 MSSQLSERVER 启用了 TCP/IP,将 1433 设置为 TCP 端口,并禁用了域网络的 Windows 防火墙。
我是否还需要修改 docker-compose.override.yaml 文件中的其他内容(可能是与环境有关的内容)?
注意 :在我的 SQL Server 网络配置 中,我看到的是 SQLEXPRESS 而不是 MSSQLSERVER。这是否会影响情况?
Docker 容器无法连接到本地 SQL Server 的问题
遇到的问题是 Docker 容器无法连接到在本地运行的 Microsoft SQL Server。已经进行了一些配置,例如启用 TCP/IP、设置端口和禁用防火墙,但问题仍然存在。
问题分析:
-
连接字符串问题:
的连接字符串使用
host.docker.internal
来连接到主机,这通常是正确的。但是,如果的 Docker Desktop 配置不是默认设置,或者使用的是 Docker Toolbox,则此主机名可能无法解析。 - SQL Server 配置问题: 提到在 SQL Server 网络配置中看到的是 SQLEXPRESS 而不是 MSSQLSERVER。 这可能意味着连接的是 SQL Server Express 实例,而不是默认实例。 请确保的连接字符串中指定的数据库实例名称与实际运行的实例名称一致。
- 端口冲突: 虽然已将 1433 设置为 TCP 端口,但其他应用程序可能正在使用该端口。可以尝试更改 SQL Server 使用的端口,并在连接字符串中进行相应的更新。
- 防火墙问题: 尽管已经禁用了域网络的 Windows 防火墙,但可能还有其他防火墙正在运行,例如第三方防火墙软件。 尝试暂时禁用所有防火墙,看看是否能解决问题。
解决方案:
-
验证主机名:
确保
host.docker.internal
可以正确解析到的主机。可以尝试在容器内 ping 这个主机名。 - 检查 SQL Server 实例名称: 确认的连接字符串中使用的实例名称与实际运行的实例名称一致。 如果使用的是默认实例,则不需要指定实例名称。
- 更改端口: 尝试更改 SQL Server 使用的端口,例如 1434,并在连接字符串中更新端口号。
- 检查防火墙: 暂时禁用所有防火墙,看看是否能解决问题。如果问题得到解决,则需要配置防火墙规则以允许 Docker 容器访问 SQL Server 端口。
- 使用 Docker 网络: 将的 .NET Core 应用程序和 SQL Server 容器连接到同一个 Docker 网络。这样,就可以使用容器名称来连接数据库,而不必使用主机名。
示例 Docker Compose 配置:
version: "3.7"
services:
my-dotnet-app:
build: .
ports:
- "8080:80"
depends_on:
- my-sql-server
environment:
- ConnectionStrings__MyDbConnection=Server=my-sql-server,1433;Database=myDb;User Id=myUser;Password=myPassword;
my-sql-server:
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- "1433:1433"
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=Your_Strong!_Password
注意:
-
将
Your_Strong!_Password
替换为安全的密码。 -
depends_on
配置项确保my-sql-server
容器在my-dotnet-app
容器之前启动。 -
使用此配置,的 .NET Core 应用程序可以使用
Server=my-sql-server,1433
连接字符串连接到 SQL Server 容器。
希望这些信息能帮到! 如果还有其他问题,请随时提出。
标签:sql-server,docker,asp.net-core,docker-compose From: 78595873