Задать вопрос

Как запустить psql в контейнере?

Имеется такая структура проекта
├── backend
│   ├── hello
│   │   ├── hello
│   │   │   ├── asgi.py
│   │   │   ├── __init__.py
│   │   │   ├── settings.py
│   │   │   ├── urls.py
│   │   │   └── wsgi.py
│   │   ├── db.sqlite3
│   │   └── manage.py
│   ├── config
│   │   └── db
│   ├── Dockerfile
│   ├── entrypoint.sh
│   ├── Pipfile
│   └── Pipfile.lock
├── docker-compose.yml

Dockerfile:
spoiler

FROM python:3.10

RUN pip install pipenv

ENV PROJECT_DIR /opt/services/backend/src
RUN mkdir -p ${PROJECT_DIR}

WORKDIR ${PROJECT_DIR}

COPY Pipfile Pipfile.lock ${PROJECT_DIR}/
RUN pipenv install --system --deploy

COPY . ${PROJECT_DIR}

EXPOSE 8080

CMD ["/bin/bash", "entrypoint.sh"]

docker-compose.yml:
spoiler

version: '3'

services:
  backend:
    build: ./backend
    ports:
      - 8080:8080
    depends_on:
      - database

  database:
    image: postgres:14
    container_name: database
    env_file:
      - ./backend/config/db/.env
    ports:
      - 5432:5432
    volumes:
      - ./db:/var/lib/postgres/data

entrypoint.sh:
gunicorn --chdir hello --bind :8080 hello.wsgi:application

Если выполнить
docker-compose build
docker-compose up -d

а затем попробовать зайти в контейнер с postgres
docker-compose run database /bin/bash
и ввести
psql -U postgres
то вылетает ошибка
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?

В этой директории действительно нет этого сокета, так же как и в /tmp (смотрел с ls -la).
В чём может быть проблема и как всё-таки запустить psql?
  • Вопрос задан
  • 122 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
docker-compose exec database /bin/bash
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Viji
@Viji
DevOps Engineer
psql это утилита для соединения с работающим postgresql сервером и выполнения в нем комманд. Наверное в вашем контейнере он просто не работает или работает на другом порту (не 5432). Проверьте какой командой запускается postgresql server и его порт.

выполните в database containere command:
netstat -tulpn

покажет все порты и приложения, лучше через рута
docker exec -u 0 database netstat -tulpn

если нет netstat, зайдите в контейнер и установите
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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