Python 无法访问在Docker容器中运行的Flask Web应用程序

Python 无法访问在Docker容器中运行的Flask Web应用程序,python,flask,docker,gunicorn,dockerfile,Python,Flask,Docker,Gunicorn,Dockerfile,我有以下Dockerfile,其中我构建了一个docker映像,其中包含ElasticSearch、Kibana4和gunicorn # gunicorn-flask

我有以下
Dockerfile
,其中我构建了一个docker映像,其中包含
ElasticSearch
Kibana4
gunicorn

# gunicorn-flask                                                                                                                                                                               
FROM devdb/kibana

MAINTAINER KS <k.s@gmail.com>

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y python python-pip python-virtualenv gunicorn
RUN pip install -U pip 

# Setup flask application
RUN mkdir -p /deploy/app

COPY gunicorn_config.py /deploy/gunicorn_config.py
COPY app /deploy/app
COPY run_gunicorn /etc/service/gunicorn

RUN pip install -r /deploy/app/requirements.txt

WORKDIR /deploy/app

EXPOSE 5000 
run\u gunicorn
的内容如下所示

    bind = "0.0.0.0:5000"
    workers = 2
    #!/bin/bash
    cd /deploy/app
我使用

sudo docker build --rm -t es-kibana-gunicorn:test-10-07-15 .
我使用

docker save 45a61ddf8d7e > es-kb-gunicorn-13-07-15.tar
其中,
45a61ddf8d7e
是图像ID

我将它复制到另一台服务器上,加载映像并运行容器

CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                                                              NAMES
d62a16fcc398        45a61ddf8d7e:latest   "/sbin/my_init"     7 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp, 0.0.0.0:5601->5601/tcp, 0.0.0.0:9200->9200/tcp, 9300/tcp   determined_shockley   
在端口5000上,gunicorn启动的Flask web应用程序正在侦听

如果我试图对该Web服务器执行
POST
,则会出现以下错误

Traceback (most recent call last):
  File "update_txid.py", line 27, in <module>
    r = requests.post("http://192.168.132.125:5000", data=json_data,headers=headers)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 108, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 464, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 415, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(111, 'Connection refused'))
回溯(最近一次呼叫最后一次):
文件“update_txid.py”,第27行,在
r=请求。post(“http://192.168.132.125:5000,data=json_data,headers=headers)
文件“/usr/lib/python2.7/site packages/requests/api.py”,第108行,在post中
返回请求('post',url,data=data,json=json,**kwargs)
文件“/usr/lib/python2.7/site packages/requests/api.py”,第50行,请求中
response=session.request(方法=method,url=url,**kwargs)
文件“/usr/lib/python2.7/site packages/requests/sessions.py”,请求中的第464行
resp=自我发送(准备,**发送)
文件“/usr/lib/python2.7/site packages/requests/sessions.py”,第576行,在send中
r=适配器.send(请求,**kwargs)
文件“/usr/lib/python2.7/site packages/requests/adapters.py”,第415行,在send中
raise CONNECTIONERR(错误,请求=请求)
requests.exceptions.ConnectionError:(“连接中止”,错误(111,“连接被拒绝”)
如果有人能帮我找出这里出了什么问题,那就太好了。
我可以访问端口5601
Kibana4
和端口9200'ElasticSearch`

如果在Boot2Docker上运行此容器,则需要启用从VirtualBox内部运行的“Boot2Docker vm”进行的端口转发


此链接将帮助您做到这一点:

我遇到了同样的问题,并尝试了Alan的解决方法,但不知何故,
VBoxManage
命令对我来说失败了

我终于找到了有效的方法:


VBoxManage controlvm boot2docker vm natpf1“规则名称,tcp,127.0.0.15000,5000”

您使用什么发布到Web服务器?你的python代码看起来怎么样?另外:你的run命令看起来怎么样?你确信你的应用程序正在运行,对吗?您是否尝试过从容器中运行curl(您可能需要安装它)<代码>docker exec-it d62a16fcc398 bash。我从那里开始。