Не удается подключиться к postgres db из pgadmin (оба работают в докере)? - PullRequest
2 голосов
/ 20 марта 2019

Я использую postgres и pgadmin4 на докере с docker-compose up на ОС fedora 28, и у меня возникают проблемы при создании нового сервера БД из веб-консоли pgadmin. Это файл docker-compose.yml, который я использую.

version: '3.0'

services:
  db:
    image: postgres:9.6
    ports:
      - 5432:5432/tcp
    environment:
      - POSTGRES_USER=admin
      - POSTGRES_PASSWORD=admin
      - POSTGRES_DB=mydb

  pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

Что я должен написать в Create new server> Соединение вкладка> Поле «Имя хоста / адрес»? Если я ввожу localhost или 127.0.0.1, я получаю сообщение об ошибке ( Невозможно подключиться , см. screenshot1 и screenshot2 ). Если я наберу db (имя службы, указанное в файле yml), только тогда pgadmin примет его и создаст сервер базы данных с базой данных postgres mydb .

Почему? Как мне найти IP, который идет в поле адреса?

Кроме того, на Fedora28:

$ netstat -napt | grep LIST
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:3350          0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::5454                 :::*                    LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -                   
$

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Я тоже столкнулся с этой проблемой совсем недавно. Я нашел два подхода:

1) Смотрите здесь . По сути, вы просто ищете IP-адрес контейнера postgres и используете этот IP-адрес в pgadmin4:

$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS                    PORTS                           NAMES
194d4a5f9dd0        dpage/pgadmin4             "/entrypoint.sh"         48 minutes ago      Up 48 minutes             443/tcp, 0.0.0.0:8080->80/tcp   docker-postgis_pgadmin_1
334d5bdc87f7        kartoza/postgis:11.0-2.5   "/bin/sh -c /docke..."   48 minutes ago      Up 48 minutes (healthy)   0.0.0.0:5432->5432/tcp          docker-postgis_db_1

В моем случае, ID контейнера postgres 334d5bdc87f7. Затем найдите IP-адрес:

$ docker inspect 334d5bdc87f7 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.18.0.2",

Когда я использовал 172.18.0.2 в pgadmin4, я подключился к базе данных! Yey!

2) Второй подход проще. Вместо использования localhost или 127.0.0.1 или ::1 я использовал свой IP-адрес в своей локальной сети ( например, в вашем случае 192.168.122.1?). После этого я подключился к контейнеру postgres!

0 голосов
/ 07 апреля 2019

Из прочитанного мной документа и его тестирования я делаю все правильно, используя имя службы базы данных из файла docker-compose yml в качестве значения поля «Имя хоста / адрес» в pgAdmin.

https://docs.docker.com/compose/networking/

В вашем разделе "pgadmin" я бы использовал значения портов 8080 или 80, почему 5454?

...