【问题标题】:Can't connect python app container to local postgres无法将 python 应用程序容器连接到本地 postgres
【发布时间】:2019-12-15 16:01:51
【问题描述】:

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

理想情况下,我可以在 .env 中定义一个 postgres url,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}

预期:连接到本地数据库成功。

实际: 服务器是否在主机 上运行并接受 端口 5432 上的 TCP/IP 连接?

【问题讨论】:

    标签: python postgresql docker


    【解决方案1】:

    localhost in container 表示容器本身,而不是 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
    

    【讨论】:

      【解决方案2】:

      我会像这样在 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

      【讨论】:

        【解决方案3】:

        好的,所以我使用 mac 作为开发机器应该已经提到过,对于那些在同样的问题上苦苦挣扎的人。 mac的docker主机IP一直在变化。

        将我的 .env postgres 网址更改为:

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

        似乎可以解决问题。

        【讨论】:

          猜你喜欢
          • 2019-07-30
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 2019-11-15
          • 2019-08-11
          • 2018-12-26
          • 2020-12-07
          相关资源
          最近更新 更多