什么会阻止在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无效)
- 我已经在另一台Ubuntu 14.04服务器上使用相同的命令行部署了相同的映像,并且连接正常。
- 在问题服务器上运行的控制台应用程序(Docker外部)可以使用相同的连接string进行连接。
据我可以看到,在一个容器中运行的应用程序默认访问外部networking,那么可以阻止这种连接?
运行在容器中的应用默认访问外部networking
只有在为容器分配了有效的IP地址的情况下才能访问。 有时Docker为容器select的IP可能与外部networking冲突。
默认情况下,容器运行在bridge
networking,所以看看它:
docker network inspect bridge
find容器并检查其IP。
要解决冲突,可以自定义 bridge
networking并设置bip
参数来更改networking的IP范围(configuration文件位置取决于主机的操作系统):
"bip": "192.168.1.5/24"
或者创build一个新的dockernetworking。
或者试用net=host
选项: docker运行networking设置
这有帮助吗?
从Docker容器连接到SQL Server数据库
此外,谷歌search这个“docker连接到SQL Server数据库”似乎返回了很多有用的结果。