将flask应用程序连接到docker容器中运行的postgresql服务

时间:2017-09-15 07:37:03

标签: postgresql docker flask docker-compose flask-sqlalchemy

我有一个使用PostgreSQL作为其后端数据库的Flask应用程序。我已经将Postgresql安装为dockerized服务(使用docker-compose)。

我现在正在我的机器上成功运行postgresql。我已输入所有相关详细信息以连接到数据库(用户,密码,数据库名称,服务器地址,服务器端口),但我无法连接。

当我尝试连接数据库时,Flask中引发了一个异常(来自psycopg2):

    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
OperationalError: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

当我检查postgresql是否正在运行时,我收到以下消息:

$ service postgresql status
● postgresql.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

在阅读了一些关于Docker和PostgreSQL的内容之后,我逐渐明白了为什么我无法连接 - 因为postgresql在自己的容器中运行 - 所以我使用的服务器地址和端口详细信息在我的数据库连接参数中是错误的。

以下是docker-ps的输出:

CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                    NAMES
b7c8cbac0a3b        mbsolutions/tryton-server-gnuhealth:3.8   "/docker-entrypoint.s"   13 days ago         Up 12 days          0.0.0.0:8000->8000/tcp   gnuhealth_tryton_1
0a4d9fd42544        mbsolutions/postgres-gnuhealth:3.0        "/docker-entrypoint.s"   13 days ago         Up 12 days          5432/tcp                 gnuhealth_db_1

我的问题是:

我应该在数据库连接参数中使用哪些参数(特别是数据库服务器地址和端口),以便我可以从我的烧瓶应用程序连接到dockerized postgresql服务?

注意:我看过这个other question,看起来很相似,但是给出的解决方案并没有直接回答我的问题。

1 个答案:

答案 0 :(得分:0)

========================正确答案开始================= =======

您必须映射postgres容器端口(5432)才能在您的主机上访问它。

在docker-compose.yml

中添加
ports:
  - "5432:5432"

========================正确答案结束================= =======

为后代保留旧答案:

您可能想要使用host网络。

在docker-compose.yml

中添加
network_mode: "host"

容器不会与您的主机本身隔离。