无法访问在Docker容器内运行的Flask Web应用程序
我有以下Dockerfile
,我build立一个包含ElasticSearch
, Kibana4
和gunicorn
# gunicorn-flask FROM devdb/kibana MAINTAINER KS <ks@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
python Flask
应用程序和包含依赖关系的requirements.txt
位于与Dockerfile
相同的path下名为app
的文件夹中。
我在同一个path中也有两个文件gunicorn_config.py
和run_gunicorn
。
gunicorn_config.py的内容如下所示。
bind = "0.0.0.0:5000" workers = 2
run_gunicorn
的内容如下所示。
#!/bin/bash cd /deploy/app
我使用构builddocker镜像
sudo docker build --rm -t es-kibana-gunicorn:test-10-07-15 .
我使用保存图像到一个tar文件
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
在port 5000
它看起来像gunicorn开始的我的Flask web application
正在监听。
如果我尝试对该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'))
如果有人能帮我弄清楚这里有什么问题,那将会很棒。 我可以访问端口5601 Kibana4
和端口9200'ElasticSearch`
我有同样的问题,并试图艾伦的解决方法,但不知何故VBoxManage
命令在那里失败了。
我终于find了这个工作的一个 :
VBoxManage controlvm boot2docker-vm natpf1 "rule_name,tcp,127.0.0.1,5000,,5000"
如果您在Boot2Docker之上运行此容器,则需要从在VirtualBox内运行的“boot2docker-vm”启用端口转发。
此链接将帮助您这样做: 解决方法 – 端口转发