Запустить контейнер postgres с объемами данных через докер-машину

У меня проблема с запуском контейнера postgres с настроенными томами для папки данных на моем компьютере Mac OS. Я пробовал запустить его вот так:

docker run \
  --name my-postgres \
  -e POSTGRES_USER=admin \
  -e POSTGRES_PASSWORD=password \
  -e POSTGRES_DB=some_db_dev \
  -v $PG_LOCAL_DATA:/var/lib/postgresql/data \
  -d postgres:9.5.1

Каждый раз в логах получал такой результат:

* Starting PostgreSQL
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are enabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
initdb: could not create directory "/var/lib/postgresql/data/pg_xlog": Permission denied
initdb: removing contents of data directory "/var/lib/postgresql/data"

Версии docker, docker-machine, virtualbox и boot2docker:

docker-machine version 0.6.0, build e27fb87
Docker version 1.10.2, build c3959b1
VirtualBox Version 5.0.16 r105871
boot2docker 1.10.3

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

Может быть, кто-нибудь меня обновит: существует ли какое-то решение для запуска контейнера postgres с объемами данных через докер-машину?

Спасибо!


person Sergey Gernyak    schedule 06.04.2016    source источник


Ответы (2)


Если вы используете docker-machine на Mac, в настоящее время вы не можете подключиться к каталогу, который не является частью вашего локального пользовательского пространства (/Users/<user>/), без дополнительной настройки.

Это связано с тем, что на Mac Docker автоматически устанавливает привязку к домашнему каталогу ~. Помните, что, поскольку Docker размещается на виртуальной машине, которая не является вашей локальной Mac OS, любые подключения томов относятся к виртуальной машине хоста, а не к вашей машине. Это означает, что по умолчанию Docker не может видеть каталоги вашего Mac, поскольку он размещен на отдельной виртуальной машине от вашей Mac OS.

Mac OS => Linux Virtual Machine => Docker
                  ^------------------^
                   Docker Can See VM
   ^-----------------X----------------^
         Docker Can't See Here

Если вы откроете VirtualBox, вы можете создать другие подключения (то есть общие папки) на вашем локальном компьютере к виртуальной машине хоста, а затем получить к ним доступ.

См. Подробности в этой проблеме: https://github.com/docker/machine/issues/1826

Я считаю, что команда Docker добавит эти возможности в следующие выпуски (тем более, что родная версия для Mac находится в стадии разработки).

person Jordan Parmer    schedule 06.04.2016

Вместо папок в локальной файловой системе следует использовать именованные тома Docker. Попробуйте создать том:

docker volume create my_vol

Затем смонтируйте каталог данных в указанной выше команде:

docker run \
  --name my-postgres \
  -e POSTGRES_USER=admin \
  -e POSTGRES_PASSWORD=password \
  -e POSTGRES_DB=some_db_dev \
  -v my_vol:/var/lib/postgresql/data \
  -d postgres:9.5.1

Ознакомьтесь с моим сообщением в блоге для всего postgres, настройки докеров node ts для dev и prod: https://yzia2000.github.io/blog/2021/01/15/docker-postgres-node.html

Подробнее о томах докеров: https://docs.docker.com/storage/volumes/

person Mohammad Yousuf Minhaj Zia    schedule 17.01.2021