Docker Nancy - 无法路由到主机

6

我有一个Docker容器,其中托管了一个使用Nancy编写的Web API。这是在容器首次启动时进行Web请求后出现的异常:

    4/22/2016 2:40:50 PM  at API.SearchModule+<SearchModule>c__AnonStorey0.<>m__0 (System.Object _) <0x41380aa0 + 0x00850> in <filename unknown>:0 
    4/22/2016 2:40:50 PM  at (wrapper dynamic-method) System.Object:CallSite.Target (System.Runtime.CompilerServices.Closure,System.Runtime.CompilerServices.CallSite,System.Func`2<object, object>,object)
    4/22/2016 2:40:50 PM  at Nancy.Routing.Route+<>c__DisplayClass4.<Wrap>b__3 (System.Object parameters, CancellationToken context) <0x4133d350 + 0x00166> in <filename unknown>:0 
    4/22/2016 2:40:50 PM2016-04-22 13:40:50,177 ERROR: System.Net.WebException: Error: ConnectFailure (No route to host) ---> System.Net.Sockets.SocketException: No route to host
    4/22/2016 2:40:50 PM  at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) <0x41374320 + 0x001b8> in <filename unknown>:0 
    4/22/2016 2:40:50 PM  at System.Net.WebConnection.Connect (System.Net.HttpWebRequest request) <0x41372b50 + 0x00609> in <filename unknown>:0 

当Web请求发生时,该应用程序会查询Elasticsearch。一开始我以为它因为找不到Elastic(另一个Docker容器)而崩溃了,然而这似乎并非如此,因为即使在本地停止Elastic,API也将继续服务请求,尽管它会抛出异常。一旦Elastic再次上线,API就会继续服务请求,这一次没有异常。
奇怪的是,如果Docker容器再次重启,则针对API的Web请求成功查询Elastic。
有没有办法在本地复制此问题,以便我可以尝试修复它?我曾认为,如果我在本地离线运行它,我会遇到同样的错误,但事实并非如此,这让我认为这是某种网络连接问题。
你们认为可能是什么原因呢?

你是否正在使用Docker的链接功能来连接应用程序和Elasticsearch容器?如果是,你是如何通过环境变量或主机名连接到Elasticsearch的? - jazgot
你使用的docker版本是什么?在哪台主机上? - VonC
请发布Compose文件的内容(如果使用),以及您用于运行容器的命令。 - johnharris85
@jazgot 我正在使用Docker链接,并通过环境变量进行连接。 - Imran Azad
使用链接有一个问题,也许这是你的情况:当你使用链接启动应用程序容器时,它将被赋予弹性的当前IP地址,并且该IP地址将保存在应用程序容器中。如果弹性容器的IP地址发生更改,则你的应用程序将无法连接到弹性(因为链接是静态的,不会更新)。 - jazgot
1个回答

1

1
谢谢,如果是 DNS 问题,为什么重启后它就能工作呢? - Imran Azad
1
我重新启动了,问题解决了,你是救命恩人。 - ilyas varol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接