2017-05-15 6 views
2

Dockerコンテナで実行されている単純なCherryPyサーバーがあり、外部からアクセスできません。私はdocker run -p 8181:8181 image-nameを使って実行します。それは正常に起動し、私は正常なサーバーのログを参照してください。コンテナの中からカール(curl localhost:8181)を試してみると、「Hello World」というレスポンスが得られます。私のマシンから試してみると、私はcurl: (52) Empty reply from serverになる。私は間違って何をしていますか?私が逃した設定はありますか?CherryPyサーバーを実行しているドッカーコンテナに外部から接続できません

Serverコード:

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:私はバージョン​​とドッカークライアントを使用している質問に多分関連、私はMacにいる;)

EDIT:Added requirements.txt

+0

私は2つの質問がrequirements.txtを持っていないので、私は複製することはできません: あなたはカーリングのhttpですか?コンテナに 'docker logs'を実行できますか?そこに結果はありますか? –

+0

こんにちは、マノ、requirements.txtの内容を追加しました。そこにはたくさんの混乱がありますが、チェリーピープルだけを残しておけば同じ結果が得られます。私はそれを試みます。私はドッカーログを実行することができますが、コンテナの中からlocalhost:8181をカールすると出力が得られます。そして、はい、私はlocalhost:8181を容器の内側と外側の両方に巻きつけています。 – Guilherme

答えて

4

私はチェリーピルのエキスパートではありません。しかし、正しい受信アドレスを聞いていることを確認するために、ホストを指定する必要があるようです。これは私の作品:// localhostを:8181

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

私はドッカーとのダウンロード時間が非常に遅いですが、私はあなたのソリューションを試してみます。ありがとうございました :) – Guilherme

関連する問題