Проблема здесь
environment:
PGDATA: /tmp
volumes:
- .cloud/postgres/data:/var/lib/postgresql/data
С помощью PGDATA
env var вы явно устанавливаете каталог clustur data . Таким образом, после запуска контейнера (например, через docker-compose up
) сервер Postgres сохранит ваши данные в БД в соответствии с настройкой PGDATA
в каталоге /tmp
. С другой стороны, вы монтируете другой путь в контейнере (/var/lib/postgresql/data
) вместо пути /tmp
. Таким образом, после запуска docker-compose down
контейнер и постоянные данные в /tmp
исчезнут навсегда, поскольку /tmp
не установлена в качестве точки подключения. Так что, если вам действительно не нужно это делать, лучше вообще не трогать его.
Рабочая конфигурация может выглядеть так (сокращено ради краткости):
version: '3'
services:
pgres:
image: "postgres" # use latest official postgres version or a specific version e.g. postgres:10.12
volumes:
- .cloud/postgres/:/var/lib/postgresql/data/ # persist data even if container shuts down
Еще одна вещь есть, даже скажем, вы настроили его с помощью PGDATA
, например, так:
environment:
PGDATA: /tmp
volumes:
- .cloud/postgres/data:/tmp
Это не будет хорошей идеей, так как путь /tmp
в вашем случае, как имя tmp
( временный ) предполагает, действительно не надежный. docker-compose down
, вероятно, никак не повлияет на него, но при следующей загрузке, т. Е. После повторного запуска docker-compose up
базовая ОС (Linux) с большой вероятностью удалит содержимое каталога /tmp
, поэтому смонтированный локальный каталог .cloud/postgres/data
также будет немедленно очищен, а ваши сохраненные данные исчезнут. В любом случае /tmp
dir в некоторой степени управляется Linux, поэтому сохраненные там данные могут просто исчезнуть в любое время - так что не надейтесь на это!