Postgresql 访问postgres docker容器时发生连接错误

Postgresql 访问postgres docker容器时发生连接错误,postgresql,docker,prisma,Postgresql,Docker,Prisma,我最近设置了一个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:

我最近设置了一个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游乐场,它可以正常工作。但我无法使用dbeaver创建到postgre容器的直接连接

dbeaver错误消息

Connection reset
为什么我的数据库连接失败

这张照片会有帮助的。
postgres
默认情况下侦听端口5432

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:
在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的原因 端口部分仅用于在主机
级别访问我们的服务。但在容器级别,如果容器中的某个端口是打开的,则任何其他正在运行的容器都可以在网络或链接的帮助下访问该端口

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


这就是我们可以使用
作为主机名的原因,compose会将该名称解析为相应(在您的案例中是postgres)容器的ip地址。

谢谢。!数据库连接正在工作。但是prisma是如何使用我的docker-compose.yml设置连接到postgre容器的?我使用的是3306:3306,我可以创建新节点,并且通过prisma Played成功地将所有数据操作保存到postgres.ports部分,目的只是让我们的服务在主机级别上可以访问。但在容器级别,如果容器中的某个端口是打开的,则任何其他正在运行的容器都可以在网络或链接部分的帮助下访问该端口。默认情况下,docker compose将根据
docker compose.yml
文件创建一个网络,并将该文件中的所有服务连接到该网络中。这就是我们可以使用
作为主机名的原因,compose会将该名称解析为相应(在您的案例中是postgres)容器的ip地址。