首页 > 解决方案 > 无法将 python 应用程序容器连接到本地 postgres

问题描述

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

理想情况下,我可以在 docker-compose 中定义一个 postgres url .env,docker-compose 使用 env 设置环境变量,应用程序读取 postgres url。

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

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

尝试使用 localhost、公共 ip、本地 ip 在 .env 中传递 POSTGRES_URL。例如:postgresql://username:password@localhost:5432/dbname

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 连接?

标签: pythonpostgresqldocker

解决方案


我会在 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


推荐阅读