У меня есть образ MariaDB, работающий в контейнере Docker, который должен обновлять свой корневой пароль при каждой инициализации по соображениям безопасности.Существует сервер хранилища, с которого мой контейнер получает новый пароль при каждой инициализации.После получения нового пароля мой скрипт должен быть запущен, чтобы войти в базу данных MariaDB и обновить пароль.Я испробовал несколько стратегий для запуска такого скрипта, как только база данных MariaDB будет запущена и запущена, но пока безуспешно.Я использую Dockerfile для создания моего расширенного образа MariaDB.В конце есть CMD ["mysqld"], который запускает сервис.Проблема в том, что мой скрипт должен быть запущен сразу после команды «CMD [« mysqld »]», поскольку именно эта команда инициализирует процесс MariaDB, а затем становится «Готов к подключению».
IsЕсть ли способ обойти эту ситуацию, чтобы запустить мой сценарий оболочки (["/foreground.sh"]) сразу после запуска и запуска сервиса MariaDB?Важно помнить, что после инициализации контейнера никакие человеческие манипуляции не допускаются.Поэтому каждое действие должно выполняться через сценарий оболочки, поскольку этот проект предназначен для производственной среды, откуда у меня нет доступа.
Соответствующая часть моего Dockerfile
VOLUME /var/lib/mysql
EXPOSE 3306
COPY docker-entrypoint.sh /
COPY foreground.sh /
RUN chmod +x /docker-entrypoint.sh /foreground.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["mysqld"] ["/foreground.sh"]
Соответствующая частьмоего "foreground.sh"
mysql -u"root" -p"$ROOT_PASSWORD" <<MariaDB_INPUT
UPDATE mysql.user SET authentication_string=PASSWORD("$MYSQL_ROOT_PASSWORD_NEW_VAULT") WHERE USER="root";
UPDATE mysql.user SET authentication_string=PASSWORD("$MYSQL_PASSWORD_NEW_VAULT") WHERE USER="user";
UPDATE mysql.user SET plugin="mysql_native_password";
FLUSH PRIVILEGES;
quit
MariaDB_INPUT