【问题标题】:Unable to connect SQLServer inside docker container无法在 docker 容器内连接 SQLServer
【发布时间】:2021-05-09 16:02:51
【问题描述】:

我正在创建一个容器,其中包含一个 .net 核心应用程序,基于官方 microsoft 图像。

当应用程序尝试连接到 SQL Server 时,我收到以下错误,它只发生在容器内:与服务器成功建立连接,但在登录前握手期间发生错误. (提供者:SSL 提供者,错误:31 - 加密(ssl/tls)握手失败)

我的应用程序使用以下软件包与 sqlserver 通信:

  • System.Data.SqlClient 4.8.2
  • 小巧玲珑 2.0.78

我的连接字符串如下所示:

Data Source=xxx.xxx.xxx.xxx;Initial Catalog=XXXXXXXX;User ID=XXXXX;Password=XXXX;MultipleActiveResultSets=True;Connect Timeout=60;TrustServerCertificate=true

我的 docker 版本是当时可用的最新版本:“Docker 版本 20.10.2,build 2291f61”正在 Windows 上运行,这就是我创建 docher 映像的方式:

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build-env
WORKDIR /prj

COPY . .
RUN dotnet publish myapp.csproj -o /app 

FROM mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR /app

RUN update-ca-certificates --fresh

COPY --from=build-env /app .
ENTRYPOINT ["dotnet", "myapp.dll"]

我已经在谷歌上搜索了一段时间,但没有找到适合我的解决方案,有人可以帮忙吗?

【问题讨论】:

  • 为什么在 .NET Core 应用程序中使用 System.Data.SqlClient 4.8.2?您可能打算使用 Microsoft.Data.SqlClient 而不是 Dapper 2.x。
  • 感谢您的反馈@AlwaysLearning,是的,但是在更改包后,问题仍然存在
  • 使用 Net5 我有同样的错误我发现这个错误似乎很相关github.com/dotnet/SqlClient/issues/633

标签: sql-server docker .net-core


【解决方案1】:

This error typically occurs in client environments like docker image containers, Unix clients, or Windows clients where TLS 1.2 is the minimum supported TLS protocol.

在 docker 镜像/客户端环境中配置 TLS/SSL 设置以连接 TLS 1.0。

MinProtocol = TLSv1 
CipherString = DEFAULT@SECLEVEL=1

【讨论】:

    猜你喜欢
    • 2020-02-08
    • 2018-01-24
    • 2022-01-11
    • 2017-05-04
    • 2020-11-20
    • 2016-11-24
    • 2020-02-29
    • 2015-05-01
    相关资源
    最近更新 更多