【问题标题】:Cannot connect to flask application with gunicorn in a docker container无法在 docker 容器中使用 gunicorn 连接到烧瓶应用程序
【发布时间】:2019-04-02 12:03:25
【问题描述】:

我有一个烧瓶应用程序,我正在尝试使用 gunicorn 在 docker 容器内运行它。

这是我的 dockerfile

FROM python:3.6

WORKDIR /app

COPY ./requirements.txt /.requirements.txt

COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt

EXPOSE 8000

ENV FLASK_APP=<some_name>
ENV FLASK_ENV=development


CMD gunicorn -b :8000 -w 4 app:app

这就是我运行容器的方式 -

docker run <name>

这就是我测试它的方式-

    curl -X POST http://172.17.0.2:8000/login -H 'cache-control: no-cache' -H 'content-type: application/json' -d '<SOME_PAYLOAD>'
curl: (7) Failed to connect to 172.17.0.2 port 8000: Operation timed out

我已经查看了couple 的答案site

据我所知,我是

  1. 暴露端口
  2. 点击正确的 IP
  3. 在我的主机上点击正确的端口
  4. 将我的主机上的端口映射到我的 docker 容器。

为什么这个操作会超时?

我也试过了

  1. CMD gunicorn -b 0.0.0.0:8000 -w 4 app:app 应该映射所有内容
  2. docker run -p 8000:8000 iterative,它应该强制在主机和容器上的端口之间进行映射。

但无济于事。

在我的电脑上,该应用程序运行良好。

为什么它在 docker 容器中不起作用?

【问题讨论】:

    标签: python docker flask gunicorn


    【解决方案1】:

    您的 docker 容器运行不正确

    docker run -p 8080:8080 <the-name-of-your-image>
    

    假设您的 Dockerfile 正在获取正确的文件,这应该可以解决问题

    转到 localhost:8080 进行验证

    【讨论】:

      【解决方案2】:

      根据我的经验,我发现以下方法在处理 gunicorn 和 docker for flask 时更有效。我建议您在 Dockerfile 中运行 CMD,如下所示:

      CMD ["gunicorn", "-b", "0.0.0.0:8000", "<scriptname>:<runtimefunction>"]
      

      您的脚本名称很可能是“app.py”和运行时函数“app”。只是为了表明我的建议:

      在 app.py 中

      from flask import Flask
      
      app = Flask(__name__)
      
      @app.route("/")
      def home():
          return "Hello, World!"
      
      if __name__ == "__main__":
          app.run(debug=True)
      

      还要添加工人:

      CMD ["gunicorn", "-w", "5", "-b", "0.0.0.0:8000", "<scriptname>:<runtimefunction>"]
      

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        我也遇到过这个问题,问题当然是我在工具链的某个地方指定了一个不同的端口。

        请仔细检查您的端口!

        app.py

        from flask import Flask
        
        app = Flask(__name__)
        
        @app.route('/')
        def index():
            return "example"
        

        Dockerfile

        FROM foo-image:tag
        ...
        RUN pip3 install gunicorn Flask
        COPY *.py /app/
        WORKDIR /app
        EXPOSE 8001
        CMD ["gunicorn", "-b", "0.0.0.0:8001", "--workers", "2", "app:app"]
        

        运行命令
        https://docs.docker.com/engine/reference/run/#expose-incoming-ports

        docker run -p 8001:8001 "$CONTAINER_TAG"
        

        【讨论】:

          猜你喜欢
          • 2021-09-04
          • 2022-01-25
          • 1970-01-01
          • 2018-03-21
          • 1970-01-01
          • 2017-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多