Вероятно, проблема заключается в том, что DATA_DIR
не установлен при запуске контейнера, и в результате база данных записывается по другому пути, чем путь, где смонтирован ваш том.
Каждый RUN
инструкция в Dockerfile выполняется в новом контейнере, и результирующие изменения шага файловой системы фиксируются в новом слое.
Однако состояние памяти не сохраняется, поэтому при запуске;
setx /M DATA_DIR "C:\\Program Files\\PostgreSQL\\9.6\\data"
Эта переменная среды известна только во время этой инструкции запуска, но не после.
Чтобы установить переменную среды, которая сохраняется как часть создаваемого образа (и будет установлена для следующего RUN
инструкции, а при запуске образа / контейнера), используйте ENV
команду dockerfile ;
ENV DATA_DIR "C:\\Program Files\\PostgreSQL\\9.6\\data"
(я не использую Windows, поэтому дважды проверьте, цитирует ли/ escape работает как положено)
Примечание : я вижу, вы устанавливаете PGPASSWORD
в переменной среды;Имейте в виду, что (при использовании ENV
) переменные среды могут видеть все, у кого есть доступ к контейнеру или изображению (docker inspect
покажет эту информацию).В этом случае пароль представляется паролем по умолчанию, поэтому, скорее всего, это не проблема.