Как запустить PostgreSQL в Docker

Как запустить PostgreSQL в Docker


Устанавливать PostgreSQL напрямую на локальную машину бывает неудобно: длинные инструкции, особенности ОС, конфликты версий. К счастью, Docker делает этот процесс простым, быстрым и переносимым.

В статье посмотрим, как запустить PostgreSQL в контейнере Docker.

Почему запускать PostgreSQL в Docker?

  • Не нужно устанавливать PostgreSQL на хост-машину
  • Можно запускать несколько версий PostgreSQL параллельно
  • Docker изолирует базу данных от операционной системы — меньше риска что-то сломать

Запуск контейнера PostgreSQL

Откройте терминал и выполните команду:

docker run --name docker-postgres -e POSTGRES_PASSWORD=mypassword -p 5431:5432 -d postgres:16

Разбор команды:

  • --name docker-postgres — имя контейнера
  • -e POSTGRES_PASSWORD=mypassword — переменная окружения для пароля пользователя postgres
  • -d — запуск в фоновом (detached) режиме
  • postgres:16 — используемый образ PostgreSQL. Если образ не загружен локально, Docker скачает его с DockerHub.
  • -p 5431:5432 — перенаправление портов: порт 5432 контейнера будет доступен на порту 5431 хоста.
  • Если PostgreSQL уже установлен на локальной машине, обязательно измените порт!
  • (Дополнительно) -e POSTGRES_DB=mydatabase — имя создаваемой базы данных (по умолчанию создаётся база postgres)

Проверка запущенных контейнеров

В терминале выполните:

docker ps

Вы увидите список запущенных контейнеров. Найдите контейнер с именем docker-postgres.

Подключение к PostgreSQL в контейнере

Выполните команду:

docker exec -it docker-postgres psql -U postgres

Разбор команды:

  • docker-postgres — имя контейнера
  • psql — команда для запуска клиента PostgreSQL внутри контейнера
  • -U postgres — подключение от имени пользователя postgres
  • -it — запуск в интерактивном режиме с терминалом
  • exec — выполнение команды в работающем контейнере

Как создать новую базу данных

Если вы не указали переменную POSTGRES_DB при создании контейнера, по умолчанию создаётся база postgres.

Чтобы создать новую базу данных, выполните команду внутри psql:

CREATE DATABASE outline_database;
Обратите внимание: в названии базы нельзя использовать дефис (-), только подчёркивание (_).

Как посмотреть список баз данных

В интерактивной оболочке psql выполните команду:

\l

Для выхода из списка нажмите q.

Что дальше?

Теперь, когда у вас работает PostgreSQL в Docker, вы можете:

  • Подключаться с помощью GUI-клиентов, например, pgAdmin, TablePlus или DBeaver
  • Использовать PostgreSQL в локальных проектах
  • Настроить постоянное хранение данных с помощью Docker volume

Возможные ошибки и их решения

Ошибка 1: OCI Runtime Exec Failed

Неправильная команда:

docker exec -it docker-postgres -U postgres

Сообщение об ошибке:

OCI runtime exec failed: exec failed: unable to start container process: exec: "-U": executable file not found in $PATH: unknown

Решение:

Флаг -U относится к команде psql, а не к docker exec.

Правильная команда:

docker exec -it docker-postgres psql -U postgres

Ошибка 2: Ошибка создания базы данных

Неправильная команда:

CREATE DATABASE outline-database;

Сообщение об ошибке:

ERROR: syntax error at or near "-"
LINE 1: CREATE DATABASE outline-database

Решение:

  1. В именах баз данных нельзя использовать дефис (-).
  2. В SQL-командах не забывайте ставить точку с запятой (;).

Правильная команда:
CREATE DATABASE outline_database;

Report Page