Установка 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