Docker compose volume mount игнорирует данные - PullRequest
0 голосов
/ 29 мая 2020

У меня есть docker файл компоновки:

    ...
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PORT: 5432
    volumes:
      - ./tablestruct:/docker-entrypoint-initdb.d/folder1
      - ./tablestruct1:/docker-entrypoint-initdb.d/folder2

volumes:
  folder1:
  folder2:

Когда я запускаю компоновку, я получаю:

postgres_1 | /usr/local/bin/docker-entrypoint.sh: игнорирование /docker-entrypoint-initdb.d/folder1 postgres_1 | postgres_1 | /usr/local/bin/docker-entrypoint.sh: игнорирование /docker-entrypoint-initdb.d/folder2

1 Ответ

0 голосов
/ 30 мая 2020

Из dockerhub postgres документация по образу:

Если вы хотите выполнить дополнительную инициализацию в образе, полученном из этого, добавьте один или несколько *. sql, *. sql .gz или *. sh скрипты в /docker-entrypoint-initdb.d (создание каталога при необходимости). После того, как точка входа вызывает initdb для создания пользователя и базы данных по умолчанию postgres, она запускает любые файлы *. sql, запускает любые исполняемые сценарии *. sh и отправляет любые найденные неисполняемые сценарии *. sh в этом каталоге для дальнейшей инициализации перед запуском службы.

Предупреждение: сценарии в /docker-entrypoint-initdb.d запускаются только в том случае, если вы запускаете контейнер с пустым каталогом данных; любая ранее существующая база данных останется нетронутой при запуске контейнера. Одна из распространенных проблем заключается в том, что если один из ваших сценариев /docker-entrypoint-initdb.d завершится неудачно (что приведет к завершению сценария точки входа) и ваш оркестратор перезапустит контейнер с уже инициализированным каталогом данных, он не продолжит работу с ваши сценарии.

Вы должны переместить все в тот же каталог и смонтировать его как /docker-entrypoint-initdb.d/, а не папку внутри него.

Итак:

volumes:
  - ./tablestruct:/docker-entrypoint-initdb.d
...