无法从外部连接到运行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}})