【问题标题】:Not able to access Flask Web application running inside a Docker container无法访问在 Docker 容器内运行的 Flask Web 应用程序
【发布时间】:2015-07-12 23:22:38
【问题描述】:

我有以下Dockerfile,我在其中构建了一个包含ElasticSearchKibana4gunicorn 的docker 映像

# 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 

python Flask 应用程序和包含依赖项的 requirements.txt 位于名为 app 的文件夹中,与 Dockerfile 位于同一路径中。

我在同一路径中还有两个文件 gunicorn_config.pyrun_gunicorn

gunicorn_config.py 的内容如下所示。

    bind = "0.0.0.0:5000"
    workers = 2

run_gunicorn的内容如下所示。

    #!/bin/bash
    cd /deploy/app

我使用构建 docker 映像

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 正在听。

如果我尝试对该网络服务器执行 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`

【问题讨论】:

  • 你用什么发布到网络服务器?你的 python 代码看起来如何?另外:你的运行命令看起来如何?
  • 您确信您的应用正在运行,对吧?您是否尝试过从容器中运行 curl(您可能需要安装它)。 docker exec -it d62a16fcc398 bash。我会从那里开始。

标签: python flask docker gunicorn dockerfile


【解决方案1】:

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

我终于找到了有效的this one

VBoxManage controlvm boot2docker-vm natpf1 "rule_name,tcp,127.0.0.1,5000,,5000"

【讨论】:

    【解决方案2】:

    如果您在 Boot2Docker 上运行此容器,则需要从 VirtualBox 中运行的“boot2docker-vm”启用端口转发。

    此链接将帮助您这样做:Workarounds - Port forwarding

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      相关资源
      最近更新 更多