无法将python应用程序容器连接到本地postgres

2024-04-20 02:43:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过在容器中运行的python脚本连接到本地运行的postgres。我这样设置它是因为将来一旦部署,我将使用一个托管数据库服务来启动postgres。你知道吗

理想情况下,我能够在.env中定义postgres url,docker compose使用env设置环境变量,应用程序读取postgres url。你知道吗

  1. 这是最好的方法还是我应该有一个postgres容器。

  2. 实现我刚才描述的流程的最佳方法。

尝试使用localhost、public ip、local ip在.env中传递POSTGRES\u URL。e、 g:p公司ostgresql://username:password@localhost:5432/数据库名

version: "3.7"

services:
  app:
    build:
      context: ./
      dockerfile: Dockerfile
    volumes:
      - "./:/usr/src/app"
    environment:
      - ENV=${ENV}
      - LOGS=${LOGS}
      - AWS_REGION=${AWS_REGION}
      - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
      - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
      - POSTGRES_URL=${POSTGRES_URL}

预期:连接到本地数据库成功。你知道吗

实际值: 服务器是否在主机<;“ip”>;上运行并接受 端口5432上的TCP/IP连接?你知道吗


Tags: 方法keyipenvaws数据库applocalhost
3条回答

容器中的localhost表示容器本身,而不是docker主机。如果您使用localhost访问postgres,它将尝试在容器中查找服务,但容器实际上没有db服务。您应该为本地postgres设置docker主机ip。你知道吗

例如,如果docker主机ip是10.192.225.111,那么.env中的POSTGRES_URL应该是:

postgresql://username:password@10.192.225.111:5432/dbname

我会在docker compose中使用postgres容器,如下所示:

  db:
    image: postgres:11.4
    ports:
      # In order to connect to the database from the host
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=pw
      - POSTGRES_USER=user

在本例中,您需要填写用户名和密码来启动容器。你知道吗

一旦您的docker-compose.yml文件中有了这个,您的应用程序容器将能够通过服务名称访问数据库容器。在这个例子中,它将是db。所以你的连接字符串应该是postgresql://user:pw@db:5432/dbname

好吧,我用mac作为开发机器,这一点我应该提到过,对于那些正在努力解决同样问题的人来说。mac的docker主机IP总是在变化。你知道吗

将my.env postgres url更改为:

postgresql://username:password@docker.for.mac.localhost:5432/dbname

似乎能成功。你知道吗

相关问题 更多 >