Docker nancy - 无主机路由

时间:2016-04-24 20:23:12

标签: docker nancy

我有一个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,最初我认为它正在爆炸,因为它无法找到弹性(另一个docker容器),但这似乎不是本地的情况如果我停止弹性,api将继续提供请求,尽管它会抛出异常。一旦弹性线重新上线,api将继续提供此次请求,无例外。

奇怪的是,如果再次重新启动docker容器,则针对api的web请求成功查询弹性。

无论如何我可以在本地复制此问题,以便我可以尝试修复?我曾经想过,如果我在本地运行弹性离线,我会得到同样的错误,但是这似乎并不是让我认为它是某种网络连接问题。

你们认为它可能是什么?

1 个答案:

答案 0 :(得分:1)

这是一个DNS问题。您的docker容器无法解析所提供的URL(主机)的IP地址。

查看'use strict'; var util = require('util'); function Parent() { } Parent.prototype.show = function () { return this.msg(); // virtual-like call; }; function Child() { } util.inherits(Child, Parent); Child.prototype.msg = function () { return 'Hello!'; }; var test = new Child(); console.log(test.show()); 选项(https://docs.docker.com/engine/reference/run/#network-settings)或修改泊坞窗图片/容器内的--dns文件。