2016-04-24 8 views
6

Ich habe einen Docker-Container, der eine Web-API in Nancy geschrieben hat. Hier ist die Ausnahme, die nach einer Web-Anforderung auftritt gemacht wird, wenn der Behälter zuerst gefeuert:Docker Nancy - keine Route zum Host

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 

Die App Anfragen Elasticsearch, wenn eine Web-Anfrage gemacht wird, zunächst dachte ich, es war die Luft zu jagen, weil sie kann nicht finde elastic (ein weiterer docker container), aber das scheint nicht der Fall zu sein, denn wenn ich lokal aufhebe, wird die API weiterhin Anfragen bedienen, obwohl sie Ausnahmen auslösen wird. Sobald elastic wieder online ist, bedient die API weiterhin Anfragen dieses Mal ohne Ausnahmen.

Die seltsame Sache ist, wenn der Docker Container erneut gestartet wird, die Web-Anfragen gegen die API sind erfolgreich bei der Abfrage elastisch.

Gibt es trotzdem ich kann dieses Problem lokal replizieren, damit ich versuchen kann, an einer Lösung zu arbeiten? Ich hatte gedacht, dass wenn ich es lokal mit elastischem offline ausführe, ich den gleichen Fehler bekommen würde, aber das scheint nicht der Fall zu sein, der mich denkt, dass es eine Art von Netzwerkverbindungsproblem ist.

Was denkst du könnte es sein?

+0

Verwenden Sie die Docker Link-Funktion, um App und elasticsearch container zu verknüpfen? Wenn ja, wie verbinden Sie sich mit elastic über env vars oder hostname? – jazgot

+0

Welche Version von Docker verwenden Sie? Auf welchem ​​Host? – VonC

+0

Veröffentlichen Sie den Inhalt der Compose-Datei (falls Sie einen verwenden) und die Befehle, die Sie zum Ausführen der Container verwenden. – johnharris85

Antwort

1

Es ist ein DNS-Problem. Ihr Andock-Container kann die IP-Adresse für die bereitgestellte URL (Host) nicht auflösen.

Werfen Sie einen Blick auf die --dns Option() oder ändern Sie die resolv.conf Datei in Ihrem Docker Bild/Container.

+0

Danke, warum funktioniert es, wenn es neu gestartet wird, wenn es sich um ein DNS-Problem handelt? –