Почему я не могу подключиться к postgres в докере?

Проблема заключается в том, что строка -для DOS/Windows заканчивается в исходном файле.

Обратите внимание, что первая команда ниже создает пустые строки, а вторая нет:

$ grep -r '.*html5uploader.*'


$ grep -r '.*html5uploader.*' | hexdump -C
00000000  74 65 73 74 2e 63 74 70  3a 09 09 3c 73 63 72 69  |test.ctp:....test.ct|
00000070  70 3a 09 09 09 24 28 22  23 73 63 72 65 65 6e 73  |p:...$("#screens|
00000080  68 6f 74 22 29 2e 68 74  6d 6c 35 75 70 6c 6f 61  |hot").html5uploa|
00000090  64 65 72 28 0d 0a                                 |der(..|
00000096

Обратите внимание на последовательность байтов 0a 0dвыше. Это указывает на окончание строки -DOS/Windows.

Следующее производит желаемый текст:

$ tr -d '\r' 
                        $("#screenshot").html5uploader(

                        $("#screenshot").html5uploader(

Таким образом, проблема заключается в том, что исходный файл, test.ctp, имеет окончания строки -DOS/Windows, которые при печати полной строки приводят к перезаписи вывода.

Используйте tr -d '\r'или одну из удобных dos2unixутилит для исправления файлов.

Для обсуждения того, какие редакторы можно использовать, чтобы избежать этой проблемы, см. «Какие текстовые редакторы правильно обрабатывают разрывы строк в стиле Windows -и Unix -?»

1
08.02.2020, 16:25
2 ответа

TLDR;

psql -h psql_postgis_db -U gis_admin gis
# or
psql -h psql_postgis_db gis gis_admin

Проблема с адресом сервера

Ни один из IP-адресов, которые вы пытаетесь использовать, не является правильным.

  • 127.0.0.1 — это адрес локального хоста. Поскольку вы запускаете команду из контейнера фляги, там не работает служба posgres.
  • 172.17.0.1 — это IP-адрес докер-моста. На самом деле это IP-адрес вашего хоста Docker Engine, который видят ваши контейнеры на том же мосту. Если на вашем компьютере не запущен postgres и он не прослушивает этот IP-адрес, вы не получите ответа (, и в любом случае это не будет правильным сервером postgres )
  • .
  • 172.17.255.255 — сетевой широковещательный адрес для предыдущей мостовой сети.

Из ваших начальных журналов мы видим, что ваш postgres должен правильно слушать. 0.0.0.0 на самом деле не является реальным IP-адресом :, он означает «любой IP-адрес, настроенный на этом хосте».

Вы можете найти IP-адрес своего контейнера postgres, чтобы связаться с ним (см., например, этот ответ на SO ), но вам даже не нужно этого делать. docker/docker -compose облегчают вам задачу, автоматически сопоставляя имена контейнеров/сервисов в той же сети с их соответствующими IP-адресами.Таким образом, ваш сервер БД доступен по имени службыpsql_postgis_db

Проблема с именем пользователя и базы данных

Я действительно не понимаю, что вы написали в опции -Uдля команды psql(сочетание пользователя + имя БД... ). В любом случае, это должно быть имя пользователя, которое вы хотите использовать для подключения к серверу postgres. Из вашего файла компоновки это gis_admin. Поскольку нет базы данных с таким же именем, как у пользователя, вам нужно указать имя базы данных, к которой вы хотите подключиться. Вы либо используете опцию -U(psql -U <user> <db>), либо используете позиционные параметры (psql <db> <user>)

.
7
28.04.2021, 23:24

Просто добавьте параметры портов в докер -compose.yml.

Пример:

# Use postgres/example user/password credentials
version: '3.1'

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: example
    ports:
      - "5432:5432"
2
28.04.2021, 23:24

Теги

Похожие вопросы