我有一个使用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,看起来很相似,但是给出的解决方案并没有直接回答我的问题。
答案 0 :(得分:0)
========================正确答案开始================= ======= 强>
您必须映射postgres容器端口(5432)才能在您的主机上访问它。
在docker-compose.yml
中添加ports:
- "5432:5432"
========================正确答案结束================= ======= 强>
为后代保留旧答案:
您可能想要使用host
网络。
在docker-compose.yml
中添加network_mode: "host"
容器不会与您的主机本身隔离。