在Docker容器中运行时无法连接到Flask

6
我正在尝试将一个简单的Flask应用程序移植到Docker中,但是我无法弄清楚为什么无法从浏览器访问该应用程序。

Docker Compose文件

version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
      - .:/app
    environment:
      FLASK_APP: api
      FLASK_ENV: development

  redis:
    image: "redis:alpine"

dockerfile

FROM python:3.7

ADD . /app
WORKDIR /app

RUN pip install -r requirements.txt
CMD ["flask", "run"]

__init__py:

def create_app(test_config=None):
  app = Flask(__name__, instance_relative_config=True)
  ...

  return app

docker-compose up --build 的结果

web_1    |  * Serving Flask app "api" (lazy loading)
web_1    |  * Environment: development
web_1    |  * Debug mode: on
web_1    |  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
web_1    |  * Restarting with stat
web_1    |  * Debugger is active!
web_1    |  * Debugger PIN: 277-205-758


但是当我打开浏览器时:
连接被重置

enter image description here

任何想法为什么?我看不出我缺少什么,因为服务器正在运行,但它会立即重置连接...
编辑:
  • 我尝试通过localhost、0.0.0.0以及使用容器IP地址访问它

尝试在0.0.0.0上监听,而不是127.0.0.1 - Sraw
1
尝试了这个,还尝试直接获取容器IP地址,但仍然出现连接被重置的问题。 - Jorge Y. C. Rodriguez
1个回答

10
尝试
CMD ["flask", "run", "--host=0.0.0.0"]

好吧,这真让我惊讶,为什么在Docker上运行时需要该参数,但在普通终端上运行时不需要呢? - Jorge Y. C. Rodriguez
您正在从容器外部连接到 Flask,因此由于跨越边界,请求不是“本地”的。 0.0.0.0 允许 Flask 响应非本地请求。 - Dave W. Smith
我尝试使用这个,但是没有成功。网页上显示的消息是“此页面无法运行0.0.0.0未发送任何数据”。 - Zaira Zafar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接