在宿主机通过hyperV安装了一台centos7的虚拟机,虚拟机的IP地址是固定的(如192.168.137.110)
然后在虚拟机安装了docker程序,里面部署了一个.netcore api程序,该程序所访问的数据库是安装在宿主机上面的(IP为192.168.0.109)
虚拟机和宿主机是可以互相ping通
core api程序访问数据报如下错误:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server)
通过各类搜索引擎和问答网站查询,大致说出现该问题应该是docker设置的网桥相关(或许不是),但是最后也没有成功处理,所以在此请教一下各位大佬。
在解决问题的过程中,数据库相关的设置应该没有问题,比如tcp/ip相关设置、namedpipes等也全部打开 还有防火墙等都打开了。
很显然,你应该先测试一下 centos 7的虚拟机能不能连接到宿主机的 SQL Server
telnet 192.168.0.109 1433
这个是可以的
[root@namenode ~]# telnet 192.168.0.109 1433
Trying 192.168.0.109...
Connected to 192.168.0.109.
@RoseNix: 如果只有这样,就是不可以的。
@爱编程的大叔: 通过另行测试可以确认虚拟机是可以能过够访问宿主机上的 sqlserver的
在容器里面ping一下SQLServer的IP。
如果ping不通,那就是hyper-v的网络的问题,改成桥接试试。
如果能ping通,那就还是SQLServer的配置或者防火墙的问题。
这些都没有问题,通过另行测试确认虚拟机是可以访问宿主机上的 sqlserver的
@RoseNix: 容器,不是虚拟机。
在终端执行ifconfig
可能看到 docker0 那个 ip,用这个可以连接到宿主机
可能是容器内OpenSSL的版本问题,在Dockefile里面加一句
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf
参考这个帖子https://github.com/dotnet/SqlClient/issues/222