【问题标题】:Connection Error accessing postgres docker container访问 postgres docker 容器时出现连接错误
【发布时间】:2019-10-08 18:53:27
【问题描述】:

我最近设置了一个 prisma 项目,这是我的 docker-compose.yml 文件

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.31
    restart: always
    ports:
      - '4030:4466'
    environment:
      TZ: ${PRISMA_DB_TIME_ZONE}
      PRISMA_CONFIG: |
        port: 4466
        # managementApiSecret: my-secret
        databases:
          default:
            connector: postgres
            host: postgres
            port: 5432
            user: prisma
            password: ${PRISMA_DB_PASSWORD}
            migrations: true
            rawAccess: true
  postgres:
    image: postgres:10.3
    restart: always
    ports:
    - "3306:3306"
    environment:
      POSTGRES_USER: prisma
      POSTGRES_PASSWORD: ${PRISMA_DB_PASSWORD}
      TZ: ${PRISMA_DB_TIME_ZONE}
    volumes:
      - postgres:/var/lib/postgresql/data
volumes:
   prisma:
   postgres:

我可以打开我的 prisma playground,它可以正常运行。但我无法使用 dbeaver 创建与 postgre 容器的直接连接。

dbeaver 错误信息

Connection reset

为什么我与数据库的连接失败?

这张照片会很有帮助。

【问题讨论】:

    标签: postgresql docker prisma


    【解决方案1】:

    postgres 默认侦听端口 5432

    在您的 postgres 容器规范中,您应该公开端口 5432 而不是 3306

    version: '3'
    services:
      prisma:
        image: prismagraphql/prisma:1.31
        restart: always
        ports:
          - '4030:4466'
        environment:
          TZ: ${PRISMA_DB_TIME_ZONE}
          PRISMA_CONFIG: |
            port: 4466
            # managementApiSecret: my-secret
            databases:
              default:
                connector: postgres
                host: postgres
                port: 5432
                user: prisma
                password: ${PRISMA_DB_PASSWORD}
                migrations: true
                rawAccess: true
      postgres:
        image: postgres:10.3
        restart: always
        ports:
        - "5432:5432"
        environment:
          POSTGRES_USER: prisma
          POSTGRES_PASSWORD: ${PRISMA_DB_PASSWORD}
          TZ: ${PRISMA_DB_TIME_ZONE}
        volumes:
          - postgres:/var/lib/postgresql/data
    volumes:
       prisma:
       postgres:
    

    如果您的 主机 中的 5432 端口已在使用,如果您想改用 3306,那么你可以像下面这样进行端口转发:

      postgres:
        image: postgres:10.3
        restart: always
        ports:
        - "3306:5432"
        environment:
          POSTGRES_USER: prisma
          POSTGRES_PASSWORD: ${PRISMA_DB_PASSWORD}
          TZ: ${PRISMA_DB_TIME_ZONE}
        volumes:
          - postgres:/var/lib/postgresql/data
    

    更新 - 1

    prisma 可以访问 postgres 的原因

    ports 部分仅用于使我们的服务可在 host 级别访问。但是在容器级别,如果一个端口在容器中打开,任何其他正在运行的容器都可以在 networks or links 部分的帮助下访问该端口。

    默认情况下,docker-compose 将为每个 docker-compose.yml 文件创建一个网络,并将该文件中的所有服务加入该网络。

    这就是我们可以使用 <service name> 作为主机名的原因,并且 compose 会将该名称解析为相应(在您的情况下为 postgres)容器的 IP 地址。

    【讨论】:

    • 谢谢!数据库连接现在正在工作。但是 prisma 是如何使用我的 docker-compose.yml 设置连接到 postgre 容器的?我正在使用 3306:3306 我可以创建新节点,并且通过 prisma 操场成功保存到 postgres 的所有数据操作。
    • ports 部分仅用于使我们的服务在 host 级别可访问。但是在容器级别,如果一个端口在容器中打开,任何其他正在运行的容器都可以在 networks 或 links 部分的帮助下访问该端口。默认情况下,docker-compose 将为每个 docker-compose.yml 文件创建一个网络,并将该文件中的所有服务加入该网络。这就是我们可以使用 <service name> 作为主机名的原因,并且 compose 会将该名称解析为相应(在您的情况下为 postgres)容器的 IP 地址。
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2020-06-05
    • 2018-03-19
    • 1970-01-01
    • 2017-12-23
    • 2014-04-25
    • 2019-10-05
    相关资源
    最近更新 更多