Ошибка подключения при доступе к контейнеру postgres - PullRequest
0 голосов
/ 22 мая 2019

Я недавно настроил проект 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, и она работает без каких-либо проблем.но я не могу создать прямое соединение с контейнером postgre с помощью dbeaver.

dbeaver Сообщение об ошибке

Connection reset

Почему не удается установить соединение с базой данных?

Эта фотографиябудет полезноenter image description here

1 Ответ

0 голосов
/ 22 мая 2019

postgres по умолчанию прослушивает порт 5432 .

В спецификации контейнера postgres вы должны выставить порт 5432 not 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 *Раздел 1030 * ports предназначен только для того, чтобы сделать наши сервисы доступными на уровне host .Но на уровне контейнера, если порт открыт в контейнере, любой другой работающий контейнер может получить доступ к этому порту с помощью сетей или ссылок раздел. По умолчанию docker-compose создаст сеть для каждого файла docker-compose.yml и присоединит все службы в этом файле к этой сети. По этой причине мы можем использовать <service name> в качестве имени хоста, и compose разрешитэто имя на ip-адрес соответствующего (в вашем случае postgres ) контейнера.

...