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

Я следил за несколькими различными учебниками, а также официальным, однако всякий раз, когда я пытаюсь установить 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 и по всему интернету, но не повезло.

4 ответов


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

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

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

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

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

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


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

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

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

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


из postgres: 9.6

запустить apt-get update & & apt-get install-q-y postgresql-9.6 postgresql-клиент-9.6 postgresql-contrib-9.6 postgresql-клиент-общий postgresql-общий Запустите echo postgres: postgres | chpasswd

запустить pg_createcluster 9.6 main --start

выполнить /etc / init.д/начать с PostgreSQL

запустите su-c "psql-c \" ALTER USER postgres PASSWORD 'postgres';\" " postgres


по умолчанию psql пытается подключиться к серверу с помощью сокета UNIX. Вот почему мы видим в/var/работа/в PostgreSQL/.С. Список pgsql.5432 - расположение дескриптора UNIX-сокета.

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

psql -h localhost [any other params]