我正在使用 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
所以我不知道出了什么问题,因为就像我说的,我没有收到任何错误消息或警告
答案 0 :(得分:2)
在 http://127.0.0.1:5000/ 上运行(按 CTRL+C 退出)
将监听 IP 地址更改为 0.0.0.0
127.0.0.1
是 localhost
内的容器,但不是主机的 localhost
。您无法连接容器的 localhost
外部容器
我不知道你是如何运行应用程序的,所以只添加了几个例子:
$ flask run --host=0.0.0.0
[server:main]
...
host = 0.0.0.0
port = 5000
...
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)