无法从外部连接到运行CherryPy服务器的Docker容器

我有一个简单的CherryPy服务器在Docker容器上运行,我无法在外部访问它。 我运行它使用docker run -p 8181:8181 image-name 。 它启动得很好,我看到正常的服务器日志。 如果我从容器中尝试curl( curl localhost:8181 ),我得到“Hello World”响应。 如果我从我的机器尝试它,我得到curl: (52) Empty reply from server 。 我究竟做错了什么? 有没有我错过的configuration?

服务器代码:

 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:也许与我正在使用版本17.03.1-ce-mac12的Docker客户端的问题相关,而且我在Mac上;)

编辑:添加requirements.txt

我不是一个樱桃专家。 但是,您似乎也必须指定一个主机,以确保您正在收听正确的传入地址。 这适用于我:

 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}}) 
Interesting Posts