- Установка PostgreSQL в контейнере docker
Для того чтобы данные PostgreSQL сохранялись на хосте, создайте каталог для хранения данных. Например:
mkdir -p ~/postgres_data
Убедитесь, что каталог имеет соответствующие права:
sudo chmod -R 700 ~/postgres_data
Перед запуском docker run
необходимо загрузить образ PostgreSQL. Это можно сделать с помощью команды docker pull
:
Выполните команду, чтобы загрузить последнюю версию образа PostgreSQL:
docker pull postgres:latest
Если вы хотите загрузить конкретную версию PostgreSQL, например, 15
, используйте:
docker pull postgres:15
После загрузки образа убедитесь, что он появился в локальном хранилище:
docker images
Вы должны увидеть образ postgres
в списке.
Если возникает ошибка с доступом к официальному реестру Docker (https://registry-1.docker.io/v2/
), это обычно связано с DNS-проблемами, блокировками на стороне провайдера или ограничениями сети. В таких случаях можно воспользоваться зеркалами (mirrors) Docker или настроить другой DNS-сервер. Вот несколько решений:
Вы можете настроить Docker на использование зеркал вместо стандартного registry-1.docker.io
. Один из популярных зеркал — это Aliyun (Alibaba Cloud). Для настройки выполните:
-
Создайте (или откройте) файл конфигурации Docker:
sudo nano /etc/docker/daemon.json
-
Добавьте или измените содержимое на следующее:
{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://mirror.gcr.io", "https://hub-mirror.c.163.com", "https://registry.docker-cn.com" ] }
-
Перезапустите службу Docker:
sudo systemctl restart docker
После этого Docker будет использовать альтернативные зеркала для загрузки образов.
Если проблема вызвана неработающим DNS-сервером, настройте использование общедоступного DNS, например Google DNS (8.8.8.8) или Cloudflare DNS (1.1.1.1):
-
Отредактируйте файл
/etc/resolv.conf
:sudo nano /etc/resolv.conf
-
Замените или добавьте строки:
nameserver 8.8.8.8 nameserver 1.1.1.1
-
Сохраните изменения и перезапустите Docker:
sudo systemctl restart docker
Если проблема сохраняется, можно загрузить образы вручную:
-
Найдите образ PostgreSQL на стороннем репозитории, например:
-
Используйте URL-адрес альтернативного реестра для загрузки образа. Пример:
docker pull registry.aliyuncs.com/postgres:latest
Если указанные выше методы не помогли, проверьте:
- Есть ли доступ к Интернету на вашем устройстве:
ping 8.8.8.8
- Проверьте, не блокируется ли доступ к
https://registry-1.docker.io
файрволом или роутером. Попробуйте использовать VPN для обхода ограничений сети.
Используйте команду docker run
, чтобы запустить контейнер PostgreSQL с указанием следующих параметров:
- Хранение данных на хосте: Каталог
~/postgres_data
монтируется в контейнер. - Логин/пароль: Устанавливаем через переменные окружения
POSTGRES_USER
иPOSTGRES_PASSWORD
. - Порт: Перенаправляем порт 5432.
- Автозапуск: Добавляем флаг
--restart=always
.
Запустите следующую команду:
docker run -d \
--name postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-v ~/postgres_data:/var/lib/postgresql/data \
-p 5432:5432 \
--restart=always \
postgres:latest
-
Убедитесь, что контейнер работает:
docker ps
Вы должны увидеть контейнер с именем
postgres
. -
Проверка подключения к PostgreSQL: Используйте команду
psql
(при наличии) или подключитесь к базе данных через клиентское приложение:psql -h 127.0.0.1 -U postgres
Пароль:
postgres
.
Флаг --restart=always
, указанный при запуске, гарантирует автоматический перезапуск контейнера при перезагрузке системы.
Если вы хотите проверить это вручную, перезапустите Docker:
sudo systemctl restart docker
Затем убедитесь, что контейнер снова запущен:
docker ps
-
Остановить контейнер:
docker stop postgres
-
Запустить контейнер:
docker start postgres
-
Удалить контейнер (данные останутся):
docker rm -f postgres
-
Создать новый контейнер (данные будут использованы повторно):
docker run -d \ --name postgres \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=postgres \ -v ~/postgres_data:/var/lib/postgresql/data \ -p 5432:5432 \ --restart=always \ postgres:latest
Для удобства вы можете использовать docker-compose
для управления PostgreSQL. Создайте файл docker-compose.yml
:
version: '3.8'
services:
postgres:
image: postgres:latest
container_name: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- ~/postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
restart: always
Запустите команду:
docker compose up -d
Теперь PostgreSQL настроен и готов к использованию.