Подключение к PostgreSQL: GUI Postico и TablePlus DB не могут подключиться, но `psql` в Docker работает (FATAL: аутентификация по паролю не удалась для пользователя) - PullRequest
0 голосов
/ 18 марта 2019

Я развернул свою базу данных PostgreSQL локально с помощью Docker. Это мой файл Docker Compose:

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.30-alpha
    restart: always
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
        # managementApiSecret: my-secret
        prototype: true
        databases:
          default:
            connector: postgres
            host: postgres
            user: prisma
            password: prisma
            port: 5432
  postgres:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: prisma
      POSTGRES_PASSWORD: prisma
    volumes:
      - postgres:/var/lib/postgresql/data
volumes:
  postgres:

Я начал это с docker-compose up -d.

Контейнеры Docker работают:

CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
26b14120f89f        prismagraphql/prisma:1.30-alpha   "/bin/sh -c /app/sta…"   17 minutes ago      Up 17 minutes       0.0.0.0:4466->4466/tcp   newdm1_prisma_1
05dfdaeaf609        postgres                          "docker-entrypoint.s…"   17 minutes ago      Up 17 minutes       5432/tcp                 newdm1_postgres_1

Теперь по какой-то причине Я не могу подключиться, используя графический интерфейс для базы данных (попробовав Postico и TablePlus). В обоих клиентах я получаю следующую ошибку:

FATAL: аутентификация по паролю не удалась для пользователя "призма"

Я уверен на 100%, что предоставляю prisma в качестве пароля, указанного в файле Docker Compose.

Кроме того, когда я подключаюсь к базе данных, используя psql из контейнера postgres Docker, он работает:

docker exec -it 05dfdaeaf609 bash

Затем внутри контейнера Docker я делаю это:

root@05dfdaeaf609:/# psql -U prisma -W prisma
Password: 
psql (11.1 (Debian 11.1-1.pgdg90+1))
Type "help" for help.

prisma=# \l
                              List of databases
   Name    | Owner  | Encoding |  Collate   |   Ctype    | Access privileges 
-----------+--------+----------+------------+------------+-------------------
 postgres  | prisma | UTF8     | en_US.utf8 | en_US.utf8 | 
 prisma    | prisma | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | prisma | UTF8     | en_US.utf8 | en_US.utf8 | =c/prisma        +
           |        |          |            |            | prisma=CTc/prisma
 template1 | prisma | UTF8     | en_US.utf8 | en_US.utf8 | =c/prisma        +
           |        |          |            |            | prisma=CTc/prisma
(4 rows)

prisma=# \c prisma
Password for user prisma: 
You are now connected to database "prisma" as user "prisma".

Пароль, который я указал внутри psql, был prisma, аналогичный тому, который я указал внутри Postico и TablePlus.

Нужно ли что-то особенное делать при подключении к базе данных PostgreSQL в контейнере Docker?

1 Ответ

1 голос
/ 18 марта 2019
PORTS
0.0.0.0:4466->4466/tcp
5432/tcp

Если вы проверите столбец портов команды docker ps, вы поймете, что порт Postgres не используется хостом.

Чтобы решить эту проблему, необходимо добавить в файл docker-compose.yml следующее:

ports:
  - "5432:5432"

Чтобы весь файл выглядел следующим образом:

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.30-alpha
    restart: always
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
        # managementApiSecret: my-secret
        prototype: true
        databases:
          default:
            connector: postgres
            host: postgres
            user: prisma
            password: prisma
            port: 5432
  postgres:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: prisma
      POSTGRES_PASSWORD: prisma
    volumes:
      - postgres:/var/lib/postgresql/data
volumes:
  postgres:

иЗатем вам нужно запустить docker-compose up -d, чтобы применить новые изменения.При правильной настройке столбец PORTS в docker ps должен выглядеть следующим образом

PORTS
0.0.0.0:4466->4466/tcp
0.0.0.0:5432->5432/tcp
...