2017-05-15 8 views
2

Ich habe einen einfachen CherryPy-Server, der auf einem Docker-Container ausgeführt wird, und kann nicht extern darauf zugreifen. Ich laufe es mit docker run -p 8181:8181 image-name. Es startet gut und ich sehe das normale Serverprotokoll. Wenn ich eine Curl (curl localhost:8181) aus dem Container versuche, bekomme ich die "Hello World" Antwort. Wenn ich es von meinem Rechner aus versuche, bekomme ich curl: (52) Empty reply from server. Was mache ich falsch? Gibt es irgendeine Konfiguration, die ich verpasst habe?Externe Verbindung zu einem Andock-Container, auf dem der CherryPy-Server ausgeführt wird

Server Code:

import cherrypy 

class HelloWorld(object): 
    @cherrypy.expose 
    def index(self): 
     return "Hello World!" 

cherrypy.quickstart(HelloWorld(), '/', {'global': {'server.socket_port': 8181}}) 

Dockerfile:

FROM python:2.7.13 

RUN mkdir -p /opt/server 

WORKDIR /opt/server 
ADD . /opt/server 
VOLUME /opt/server 

RUN apt-get update \ 
&& apt-get install -y \ 
    python-setuptools \ 
    libopenblas-dev \ 
    gfortran \ 
    vim \ 
    curl \ 
    telnet \ 
    wget \ 
&& pip install --upgrade pip \ 
&& pip install -r requirements.txt 

EXPOSE 8181 

CMD python server.py 

requirements.txt

bottle==0.12.13 
daemon 
cherrypy==8.9.1 
ipython==5 
lockfile 
numpy 
psutil 
python-daemon 
python-dateutil 
rocket 
scikit-learn==0.18.1 
scipy 
matplotlib 

PS: Vielleicht relevant für die Frage, die ich bin mit dem Docker-Client mit Version 17.03.1-ce-mac12 und ich bin auf einem Mac;)

EDIT: Hinzugefügt Anforderungen.txt

+0

Ich kann nicht replizieren, weil ich nicht den requirements.txt so zwei Fragen: sind Sie Curling http: // localhost: 8181? Können Sie "docker logs" auf dem Container ausführen? Irgendwelche Ergebnisse dort? –

+0

Hi, Mano, ich habe den Inhalt von requirements.txt hinzugefügt, da ist eine Menge Krempel drin, aber ich vermute, dass wenn ich nur cherrypy verlasse, ich die gleichen Ergebnisse bekomme. Ich werde es versuchen. Ich kann Docker-Protokolle ausführen, aber ich bekomme nur ausgegeben, wenn ich localhost: 8181 aus dem Container locken. Und ja, ich curle localhost: 8181 sowohl innerhalb als auch außerhalb des Containers. – Guilherme

Antwort

4

Ich bin kein Experte cherrypy. Es sieht jedoch so aus, als müssten Sie auch einen Host bestimmen, um sicherzustellen, dass Sie die richtige eingehende Adresse hören. Dies funktioniert für mich:

import cherrypy 

class HelloWorld(object): 
    @cherrypy.expose 
    def index(self): 
     return "Hello World!" 

cherrypy.quickstart(HelloWorld(), '/', {'global': {'server.socket_host':'0.0.0.0','server.socket_port': 8181}}) 
+0

Ich habe eine wirklich langsame Download-Zeit mit Docker, aber ich werde Sie auf dem Laufenden halten, während ich Ihre Lösung versuche. Vielen Dank :) – Guilherme

Verwandte Themen