Dotnet Core在运行时无法解析Docker地址

时间:2018-10-17 06:48:58

标签: c# mongodb docker

我目前在与Mongodb实例通信的dotnet核心服务上工作。两者都在Windows机器上的同一网络(通过docker compose v3定义)上的单独docker容器中运行。

构建完mongo容器后,会赋予3个别名:

Aliases: [ "030829f0895", "mongodb", "communicationDB"]

其容器名称为communicationDB

在服务应用程序中,将连接字符串连接到mongodb:// admin:password @ communicationDB:27017

解析此字符串后,问题就出现了,而不是获得正确的IP地址,而是将其解析为该容器在您尝试解析不存在的DNS条目时所使用的地址(稍后将对此进行详细介绍)

"MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: Connection refused 207.148.248.143:27017

但是,如果要在应用程序容器内执行telnet到正确解析的地址 Address

请注意,尝试通过telnet到不存在的任何名称将解析为上述IP(207.1 ..)

为了解决此问题,我将连接字符串更改为以与容器名称不匹配的别名为目标

这里奇怪的是,DNS不会在核心应用程序外部解析容器名称,但是在应用程序内部却并非如此。无论容器构建顺序或进行连接尝试时,都会发生这种情况,即使独立于应用程序(而不是在一个撰写文件中)构建数据库容器,问题仍然存在。

尽管此变通办法可以解决问题,但花了很多时间才解决,而且我从没有地方认为这是一个问题,所以就我自己和其他人而言,这是预期的行为,并为此目的,到底是什么原因?

0 个答案:

没有答案