无法从外部连接到 docker 容器 运行 CherryPy 服务器
Cannot connect externally to a docker container running CherryPy server
我在 Docker 容器上有一个简单的 CherryPy 服务器 运行ning,我无法从外部访问它。我 运行 它使用 docker run -p 8181:8181 image-name
。它启动得很好,我看到了正常的服务器日志。如果我尝试从容器内部卷曲 (curl localhost:8181
),我会得到 "Hello World" 响应。如果我从我的机器上尝试,我会得到 curl: (52) Empty reply from server
。我究竟做错了什么?有没有我遗漏的配置?
服务器代码:
import cherrypy
class HelloWorld(object):
@cherrypy.expose
def index(self):
return "Hello World!"
cherrypy.quickstart(HelloWorld(), '/', {'global': {'server.socket_port': 8181}})
Docker文件:
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
我不是 cherrypy 专家。但是,看起来您还必须指定一个主机,以确保您正在收听正确的传入地址。这对我有用:
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}})
我在 Docker 容器上有一个简单的 CherryPy 服务器 运行ning,我无法从外部访问它。我 运行 它使用 docker run -p 8181:8181 image-name
。它启动得很好,我看到了正常的服务器日志。如果我尝试从容器内部卷曲 (curl localhost:8181
),我会得到 "Hello World" 响应。如果我从我的机器上尝试,我会得到 curl: (52) Empty reply from server
。我究竟做错了什么?有没有我遗漏的配置?
服务器代码:
import cherrypy
class HelloWorld(object):
@cherrypy.expose
def index(self):
return "Hello World!"
cherrypy.quickstart(HelloWorld(), '/', {'global': {'server.socket_port': 8181}})
Docker文件:
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
我不是 cherrypy 专家。但是,看起来您还必须指定一个主机,以确保您正在收听正确的传入地址。这对我有用:
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}})