Я хотел бы добавить опцию конфигурации в собственный, основанный на PostgreSQL образ Docker для OpenShift 3.9 в форме переменной шаблона INITDB
.Образ предоставляет базу данных, которая поддерживается постоянным хранилищем, и с этого момента базу данных следует инициализировать, только когда эта переменная (флаг) установлена.
Образ построен с использованием стратегии сборки OpenShift Docker и PostgreSQL * 1004.* вызывается в Dockerfile
'ENTRYPOINT
сценарии: поэтому он выполняется при каждом запуске контейнера.Однако я хочу, чтобы установленный флаг имел эффект только при первом запуске помеченного контейнера.В противном случае может произойти то, что база данных инициализируется при первом запуске контейнера (как и должно быть), но также становится повторно инициализированной при перезапуске контейнера, например, из-за миграции на другой узел (это нежелательно).
Таким образом, я, вероятно, нуждаюсь в некоторой логике, посредством которой скрипт сохраняет идентификатор изображения контейнера в файле также в постоянном хранилище с логикой, такой, что он вызывает initdb
, только если установлен флаг и , файл несуществует или содержит другой идентификатор изображения.Так что, возможно, что-то в этом роде примерно так:
file=/mnt/pgdata/image_id
if [ -n "$INITDB" ] && [ $(cat $file) != $image_id]; then
initdb ...
echo $image_id > $file
fi
Итак, мой вопрос заключается в следующем: как работающий контейнер может узнать идентификатор своего изображения?Есть ли готовая переменная окружения (например, OPENSHIFT_...
- пока я не нашел ни одной) или она должна была пройти через API?Второй вариант кажется осуществимым, потому что oc describe pods
содержит список «Идентификатор изображения» (и из-за oc explain pod.spec.containers.image
).Но нужно ли / желательно ли это, и если да, нужно ли предоставлять явные учетные данные или по умолчанию контейнеры имеют соответствующие учетные данные?
Мне также было бы интересно узнать, как собственный / "официальный" образ PostgreSQL в OpenShiftпредоставляет такую функциональность, но пока не нашел правильный исходный код.