我有一个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请求成功查询弹性。
无论如何我可以在本地复制此问题,以便我可以尝试修复?我曾经想过,如果我在本地运行弹性离线,我会得到同样的错误,但是这似乎并不是让我认为它是某种网络连接问题。
你们认为它可能是什么?
答案 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
文件。