Как запустить 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
Решение:
- В именах баз данных нельзя использовать дефис (
-). - В SQL-командах не забывайте ставить точку с запятой (
;).
Правильная команда:CREATE DATABASE outline_database;