Проблема с док-контейнерами postgresql и pgadmin

Я пытаюсь соединить postgresql и pgadmin4 вместе. pgadmin4 работает нормально, но когда я пытаюсь создать новый сервер, у меня возникают 2 проблемы:

  • если контейнер postgres находится на другом порту, отличном от 5432, он не распознает этот порт. Он показывает эту ошибку: could not connect to server: Connection refused Is the server running on host "172.17.0.5" and accepting TCP/IP connections on port 5431?
  • если контейнер postgres находится на порту 5432, ошибка будет FATAL: password authentication failed for user "example".

Я выполняю эту команду, чтобы получить контейнер postgres: docker run -p 5431:5432 --name postgres2 -e POSTGRES_PASSWORD=ad1234 -d postgres.

Я пытаюсь, следуя другим ответам в stackoverflow, добавить эту команду -c"listen_addresses='*'", и я тоже вхожу в файл конфигурации, но у меня ничего из этого не работает.

Надеюсь, вы можете мне помочь, спасибо.

РЕДАКТИРОВАТЬ [Решено]

Хорошо, я решил, это был большой провал с моей стороны. Я использовал 172.17.0.5 (адрес IP-контейнера), а для подключения мне нужно использовать 172.17.01 (шлюз). Спасибо за ваше время.


person Schwarz54    schedule 30.04.2019    source источник
comment
Is the server running on host "172.17.0.5" and accepting TCP/IP connections on port 5431? - ну что? Как вы пытались проверить правильность IP и порта?   -  person Richard Huxton    schedule 01.05.2019
comment
этот IP-адрес является IP-адресом контейнера postgres, и порт, который я считаю правильным, потому что я перенаправляю его, когда запускаю его в первый раз -p 5431:5432. Я выполняю команду docker inspect postgres2 и в разделе network я получил это "IPAddress": "172.17.0.5",, а в разделе ports получил это "Ports": { "5432/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "5431" } ]   -  person Schwarz54    schedule 01.05.2019
comment
Итак, согласно тому, что вы только что опубликовали, он не прослушивает 172.17.0.5;5432, не так ли?   -  person Richard Huxton    schedule 01.05.2019
comment
когда я делаю docker start -a postgres2 вот что я получаю 2019-04-30 22:26:32.062 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 2019-04-30 22:26:32.062 UTC [1] LOG: listening on IPv6 address "::", port 5432 2019-04-30 22:26:32.073 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2019-04-30 22:26:32.122 UTC [24] LOG: database system was shut down at 2019-04-30 22:24:12 UTC 2019-04-30 22:26:32.128 UTC [1] LOG: database system is ready to accept connections   -  person Schwarz54    schedule 01.05.2019
comment
Я ответил на это здесь: stackoverflow.com/ вопросы/25540711/   -  person Afshin Ghazi    schedule 30.08.2019


Ответы (1)


Я воспроизвел ваш сценарий следующим образом:

# docker run -p 5431:5432 --name postgres2 -e POSTGRES_PASSWORD=ad1234 -d postgres
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
d4030c577a24        postgres            "docker-entrypoint.s…"   2 minutes ago      Up 2 minutes       0.0.0.0:5431->5432/tcp   postgres2

# sudo -u postgres psql -h localhost -p 5431
could not change directory to "/root": Permission denied
Password: 
psql (10.5, server 11.2 (Debian 11.2-1.pgdg90+1))
WARNING: psql major version 10, server major version 11.
         Some psql features might not work.
Type "help" for help.

postgres=# CREATE DATABASE mytestdb;
CREATE DATABASE
postgres=# \q

Теперь запустим докер для pgadmin и сможем подключиться к postgresql:

docker run -p 80:80 --link postgres2 -e "[email protected]" -e "PGADMIN_DEFAULT_PASSWORD=SuperSecret" -d dpage/pgadmin4

С помощью приведенной выше команды вы можете связать докер postgres2 с докером pgadmin, а затем при создании соединения на pgadmin4 вы должны использовать:

  • имя/адрес хоста: postgres2
  • порт: 5432
  • База данных обслуживания: postgres
  • имя пользователя: постгрес

с этим я подключился к Postgres из pgadmin4

Насколько мне известно, docker PostgreSQL по умолчанию поставляется с подключением только к локальному хосту, и если вы хотите добавить удаленное подключение, вы должны добавить «listen_addresses = '*'» в postgresql.conf

person Ikaro0    schedule 30.04.2019
comment
Я не понимаю, что вы имеете в виду своим комментарием, извините. - person Schwarz54; 01.05.2019
comment
Извините, я неправильно понял ваш вопрос, добавляя данные о соединении pgadmin - person Ikaro0; 01.05.2019
comment
Это тоже работает. Я принимаю это как действительный ответ. Я думаю, что это работает, потому что вы используете --link, потому что я сделал это без этой команды, и моя не сработала. Я проверил, как вы, и это работает отлично. - person Schwarz54; 01.05.2019