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

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

我现在在我的机器上成功运行postgresql。 我input了所有相关的详细信息以连接到数据库(用户,pwd,dbname,服务器地址,服务器端口),但无法连接。

当我尝试连接到数据库时,在Flask(来自psycopg2)中抛出一个exception:

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运行在自己的容器中 – 所以我在db连接参数中使用的服务器地址和端口细节是错误的。

这里是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服务?

注:我已经看到了这个似乎相似的其他问题 ,但给出的解决scheme并不直接回答我的问题。

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

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

将其添加到docker-compose.yml中

 ports: - "5432:5432" 

======================== Correct Answer End ======================= =

旧的答案为后人保留:

你可能想要使用hostnetworking。

将其添加到docker-compose.yml中

 network_mode: "host" 

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