.net Core Docker发布连接SqlServer遇到的的一些问题
使用Docker发布.NetCore,后台使用SqlServer 出现了握手问题。如下
System.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 35 - An internal exception was caught)
原因:允许的 ssl 最低版本是 TLSv1.2 ,而程序所使用的 SQL Server 数据库版本比较低不支持 TLSv1.2 ,修改为 TLSv1.0 后问题解决
解决方法: 在DockerFile中添加指令
RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf
正常报35的问题就会解决,但是加上这一句后会出现新的问题
A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption(ssl/tls) handshake failed)
原因:openssl.cnf 配置文件中有一句
[system_default_sect] MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=2
似乎是.Net 5.0不支持 这个值为2,修改成
[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1
并在CMD中执行 docker cp e:/openssl.cnf festive_rubin:/etc/ssl/openssl.cnf (e:/为openssl.cnf文件地址estive_rubin为Docker名称)
执行后问题解决。
这样解决问题会出现每次发不动需要进行一次这样的操作的情况。所以可以先下载好.net5 ,cmd中输入指令docker pull mcr.microsoft.com/dotnet/aspnet:5.0。

装好.net5镜像.
点击run运行该镜像,生成新实例。

然后将上述方法中的openssl.cnf文档写入新实例中,cmd中输入 docker cp d:/openssl.cnf insteresting_gauss (这个是生成新实例的名称)
然后使用新实例重新生成新镜像,cmd中输入 docker commit insteresting_gauss net5 (insteresting_gauss这个是实例名, net5是新镜像的名字,这个名字自己取,字母需要全小写)

回车后可以看到生成的新镜像。
接下来将发布文件夹的DockerFile文件的基础镜像替换成我们新生成的镜像即可


浙公网安备 33010602011771号