【问题标题】:connect to postgres container from flask app inside container从容器内的烧瓶应用程序连接到 postgres 容器
【发布时间】:2018-11-30 21:14:48
【问题描述】:

我有我的烧瓶应用app.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

APP = Flask(__name__)
DB = SQLAlchemy()

if __name__ == '__main__':
    APP.config.from_mapping(
        SQLALCHEMY_DATABASE_URI='postgres://postgres:password@0.0.0.0:5432',
        SQLALCHEMY_TRACK_MODIFICATIONS=False
    )
    DB.init_app(APP)
    DB.create_all(app=APP)
    APP.run(use_reloader=False, host='0.0.0.0', port='5000')

我有一个 Dockerfile:

FROM python:3.6-alpine

RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev

WORKDIR /root

COPY app.py .

RUN pip3 install Flask==1.0.2
RUN pip3 install psycopg2-binary==2.7.6.1
RUN pip3 install Flask-SQLAlchemy==2.3.2

CMD ["python3", "app.py"]

我跑:

docker build . --tag flaskapp:1
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password --name database postgres
docker run --rm -p 5000:5000 flaskapp:1

然后我得到一个异常指出:

sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused
    Is the server running on host "0.0.0.0" and accepting
    TCP/IP connections on port 5432?

我该如何解决这个问题?

【问题讨论】:

  • 好吧,我发现--network=host 解决了这个问题。它可能会导致其他问题,但总比暂时不工作要好

标签: postgresql docker flask-sqlalchemy


【解决方案1】:

您已将0.0.0.0 指定为要连接的IP 地址,这没有意义。 0.0.0.0 是“任何地址”。您可能看到 postgres 正在侦听 0.0.0.0 的消息,这是您从那里得到它的。在服务器侦听 0.0.0.0 的上下文中,这意味着它正在侦听所有 ipv4 接口。有关特殊 0.0.0.0 地址及其含义的更多信息,请参阅https://en.wikipedia.org/wiki/0.0.0.0

如果你想连接到 postgres 服务,那么你需要使用有效的 ip 地址或运行它的 dns 名称。

在 Docker 中,如果你有多个命名容器连接到同一个用户定义的网络,你可以利用 Docker 自带的内置服务发现机制。

为了利用这一点,可以运行一组经过修改的命令:

docker network create mynet
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=password --net mynet --name database postgres
docker run --rm -p 5000:5000 --net mynet flaskapp:1

请务必更改您的代码以连接到postgres://postgres:password@database:5432 而不是postgres://postgres:password@0.0.0.0:5432

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2021-09-04
    • 2020-06-17
    • 1970-01-01
    • 2023-03-31
    • 2020-11-20
    • 1970-01-01
    • 2017-10-18
    • 2021-12-16
    相关资源
    最近更新 更多