什么会阻止在Docker容器中运行的代码连接到单独的服务器上的数据库?

我在Ubuntu 14.04的Docker容器中运行了.NET Core 1.1应用程序,并且无法连接到在单独的服务器上运行的SQL Server数据库。

错误是:

未处理的exception:System.Data.SqlClient.SqlException:build立与SQL Server的连接时发生networking相关或实例特定的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:TCP提供程序,错误:25 – 连接string无效)

  1. 我已经在另一台Ubuntu 14.04服务器上使用相同的命令行部署了相同的映像,并且连接正常。
  2. 在问题服务器上运行的控制台应用程序(Docker外部)可以使用相同的连接string进行连接。

据我可以看到,在一个容器中运行的应用程序默认访问外部networking,那么可以阻止这种连接?

运行在容器中的应用默认访问外部networking

只有在为容器分配了有效的IP地址的情况下才能访问。 有时Docker为容器select的IP可能与外部networking冲突。

默认情况下,容器运行在bridgenetworking,所以看看它:

 docker network inspect bridge 

find容器并检查其IP。

要解决冲突,可以自定义 bridgenetworking并设置bip参数来更改networking的IP范围(configuration文件位置取决于主机的操作系统):

 "bip": "192.168.1.5/24" 

或者创build一个新的dockernetworking。

或者试用net=host选项: docker运行networking设置

这有帮助吗?

从Docker容器连接到SQL Server数据库

此外,谷歌search这个“docker连接到SQL Server数据库”似乎返回了很多有用的结果。