使用 docker-compose 重置连接的烧瓶应用程序

时间:2021-07-30 06:13:31

标签: python docker flask docker-compose

我正在使用 docker-compose 构建一个小烧瓶服务及其使用的数据库。我的 docker-compose.yml 看起来像这样:

version: '3.7'
services:
    database:
        image: postgres:10.5
        restart: always
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        logging:
          options:
            max-size: 10m
            max-file: "3"
        ports:
          - '5438:5432'
        volumes:
          - ./postgres-data:/var/lib/postgresql/data
          - ./sql/schema.sql:/docker-entrypoint-initdb.d/schema.sql
    web:
      build: .
      ports:
        - "5000:5000"
      depends_on:
        - database
      volumes:
        - .:/code
      environment:
        - FLASK_APP=app.py

我的应用程序文件使用了另一个模块中的一些方法,我尝试像往常一样导入这些方法,看起来像这样

但是,在我使用

构建两个容器之后
docker-compose up --build database web

似乎一切正常,因为我没有收到任何错误消息,它说:

<块引用>

但是当我从我的应用程序转到任何该 URL 或任何其他路由时,它表示连接已重置。同样使用 curl,这就是我得到的:

<块引用>

curl: (56) Recv failure: Connection reset by peer

所以我不知道出了什么问题,因为就像我说的,我没有收到任何错误消息或警告

1 个答案:

答案 0 :(得分:2)

<块引用>

http://127.0.0.1:5000/ 上运行(按 CTRL+C 退出)

将监听 IP 地址更改为 0.0.0.0

127.0.0.1localhost 内的容器,但不是主机的 localhost。您无法连接容器的 localhost 外部容器

我不知道你是如何运行应用程序的,所以只添加了几个例子:

  • 如果你在命令行中运行flask
$ flask run --host=0.0.0.0
  • 如果您在 config 中使用 gunicorn 设置主机参数
[server:main]
...
host = 0.0.0.0
port = 5000
...
  • 如果您通过 python 模块中的代码运行应用
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)