提问人:Paulo Santos 提问时间:10/13/2023 最后编辑:halferPaulo Santos 更新时间:11/13/2023 访问量:77
如何解决“在Docker Desktop中运行时SqlClient连接失败”?
How to solve “SqlClient connection fails when ran in Docker Desktop”?
问:
我正在尝试连接到开发箱上的本地 SQL Server Express 实例。
我正在使用以下代码:
var cs = new System.Data.SqlClient.SqlConnectionStringBuilder();
cs.InitialCatalog = "dev_db";
cs.DataSource = @"(local)\SQLEXPRESS";
cs.IntegratedSecurity = false;
cs.ConnectTimeout = 5;
cs.Encrypt = false;
cs.UserID = "user";
cs.Password = "password";
var xpto = new System.Data.SqlClient.SqlConnection(cs.ConnectionString);
xpto.Open();
这在控制台或 Windows 应用中工作正常,但在尝试在 Docker 桌面(配置为 Linux)中运行的 Web API 项目时会失败。
完全相同的代码。
这是抛出的异常:
System.Data.SqlClient.SqlException
与 SQL Server 建立连接时发生与网络相关的错误或特定于实例的错误。
找不到服务器或无法访问服务器。验证实例名称是否正确,以及 SQL Server 是否配置为允许远程连接。
(提供程序:TCP 提供程序,错误:25 - 连接字符串无效)
有没有人遇到过这个问题并知道如何解决它?
要先发制人地回答问题,请执行以下操作:
// Attempt with host.docker.internal
cs.DataSource = @"host.docker.internal\SQLEXPRESS";
// Same error
// Attempt with dev box IP
cs.DataSource = @"192.168.15.3\SQLEXPRESS";
// Same error.
SQL Server Express 的实例位于开发箱上,而不是在 Docker 中。
SQL Server Express 配置为允许远程连接:
编辑添加:
这是 Docker 文件:
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["TestProject.csproj", "."]
RUN dotnet restore "./TestProject.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "TestProject.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestProject.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestProject.dll"]
编辑添加:
与 PostgreSQL 数据库的连接成功。只有 SQL Server Express 让我头疼。
答: 暂无答案
评论
SQLEXPRESS
-p realport:containerport