Docker - Postgres и pgAdmin 4: соединение отказано - PullRequest
0 голосов
/ 04 декабря 2018

Новичок с докером, я пытаюсь подключить через локальный хост мой контейнер pgAdmin к postgres.

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
0b00555238ba        dpage/pgadmin4      "/entrypoint.sh"         43 minutes ago      Up 43 minutes       0.0.0.0:80->80/tcp, 443/tcp   pedantic_turing
e79fb6440a95        postgres            "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:5432->5432/tcp        pg-docker

Мне удается подключиться с помощью команды psql.

psql -h localhost -U postgres -d postgres

Но когда ясоздать сервер на pgAdmin с теми же параметрами, что и psql. Я получил следующую ошибку:

Невозможно подключиться к серверу:

не удалось подключиться к серверу: соединение отказано Является ли сервер запущеннымна хосте "localhost" (127.0.0.1) и принимать соединения TCP / IP через порт 5432?не удалось подключиться к серверу: адрес не доступен Является ли сервер, работающий на хосте "localhost" (:: 1), и принимает ли соединения TCP / IP через порт 5432?

Мне удалось подключиться через указанный IP-адресна docker inspect на контейнере.

Кстати, я проверил postgresql.conf и утверждаю, что listen_addresses = '*', а также, что pg_hba.conf содержит host all all all md5.

Но я нене понимаю, почему я не могу использовать адрес localhost?И почему докер даже дает мне адрес, который не является локальным?

Ответы [ 2 ]

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

Я не знаю, если у вас все еще есть проблема.Полагаю, я нашел решение.

Итак, мы заметили, что localhost не работает, но если вы используете psql вне среды докера, все работает нормально.Но оба приложения работают в контейнере в Docker, и у него есть собственные конфигурации сети.

Как это обнаружить?введите команду: docker network ls

Некоторые сети будут перечислены в консоли, возможно, вы найдете [name]_default, это должна быть ваша сеть.

Выполните docker network [name]_default inspect это будетпоказать кучу информации, для нас наиболее важным является IPv4Address, что-то вроде этого: "7c3cd7532ab8aacc70830afb74adad7296d9c8ddd725c498af2d7ee2d2c2aadd": { "Name": "intime_postegres_1", "EndpointID": "56a9cb574469f22259497b72719f9f4a3e555b09f95058fcf389ef5287381f28", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }

На pgAdmin я подключился к экземпляру postgres на 172.18.0.2:5432.Работает как шарм.

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

У меня была та же проблема, и я решил ее неканоническим способом, но очень хорошо для моего локального рабочего процесса.

Я всегда запускаю свой контейнер postgresql с файлом docker-compose.yaml.Поэтому я просто добавил pgAdmin в тот же файл составления:

version: "3.7"
services:
  my_awesome_db:
    image: postgres:latest
    ports:
      - "5432:5432"
    container_name: postgresql-local
    volumes:
      - "/var/run/postgres.sock:/var/run/postgres/postgres.sock"
      - "/home/myuser/docker-apps/volumes/postgres-data:/var/lib/postgresql/data"
  pg_admin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin4
    ports:
      - "15432:80"
    environment:
      - GUNICORN_THREADS=1
      - PGADMIN_DEFAULT_EMAIL=my_awesome_email@email.com
      - PGADMIN_DEFAULT_PASSWORD=does_not_matter
    depends_on:
      - my_awesome_db

Итак, я получаю доступ к pgAdmin на моем локальном хосте: 15432 (просто потому, что его легко запомнить), и я настроил pgAdmin с помощью:

Host: my_awesome_db
Port: 5432
Username: postgres
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...