Установка PostgreSQL в контейнер докеров

Я следил за несколькими учебными пособиями, а также с официальными, но когда я пытаюсь установить PostgreSQL в контейнер, я получаю следующее сообщение

psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Я просмотрел несколько вопросов здесь, на SO и по всему Интернету, но не повезло.

Ответ 1

Проблема заключается в том, что ваше приложение/проект пытается получить доступ к файлу сокета postgres в машине HOST (не докер-контейнере).

Чтобы решить эту проблему, нужно либо явно запросить подключение tcp/ip при использовании флага -p для настройки порта для контейнера postgres, либо совместно использовать Unix-сокет с обработкой HOST с помощью -v флаг.

: Примечание: Использование флага -v или --volume= означает, что вы разделяете некоторое пространство между машиной HOST и контейнером докера. Это означает, что если у вас установлены postgres на хост-машине и ее запуск, вы, вероятно, столкнетесь с проблемами.

Ниже я демонстрирую, как запустить контейнер postgres, который доступен из tcp/ip и unix socket. Также я называю контейнер как postgres.

docker run -p 5432:5432 -v /var/run/postgresql:/var/run/postgresql -d --name postgres postgres

Существуют и другие решения, но я считаю это наиболее подходящим. Наконец, если приложение/проект, которому нужен доступ, также является контейнером, лучше просто связать их.

Ответ 2

По умолчанию psql пытается подключиться к серверу через сокет UNIX. Вот почему мы видим /var/run/postgresql/.s.PGSQL.5432- расположение дескриптора сокета UNIX.

Если вы запускаете postgresql-server в докере с привязкой порта, вы должны указать psql использовать TCP-сокет. Просто добавьте параметр:

psql -h localhost [any other params]

Ответ 3

Вот инструкции по исправлению этой ошибки, которая также должна работать для вашего контейнера докеров: Ошибка PostgreSQL 'Не удалось подключиться к серверу: нет такого файла или каталога

Если это не работает по какой-либо причине, есть много готовых контейнеров-докеров-postgresql, на которые вы можете посмотреть ссылку на индекс Docker: https://index.docker.io/search?q=postgresql

Многие из контейнеров построены из надежных репозиториев на github. Поэтому, если вы найдете тот, который, похоже, соответствует вашим потребностям, вы можете просмотреть источник.

В проекте Flynn также добавлено устройство postgresql, которое стоит проверить: https://github.com/flynn/flynn-postgres

Ответ 4

ОТ postgres: 9,6

RUN apt-get update && apt-get install -q -y postgresql-9.6 postgresql -c lient-9.6 postgresql -c ontrib-9.6 postgresql -c lient -c ommon postgresql -c ommon RUN echo postgres: Postgres | chpasswd

RUN pg_createcluster 9.6 main --start

RUN/etc/init.d/postgresql start

RUN su -c "psql -c \" ALTER USER postgres ПАРОЛЬ 'postgres';\"" postgres