Сборка django в докерах: как запустить только один раз createsuperuser
У меня есть контейнер django docker для бэкенда моего сайта. Есть том для базы данных, так что я могу сохранить базу данных, даже если я изменю конфигурацию бэкенда.
Я пытался поместить createsuperuser в свой Dockerfile и в скрипт, запускаемый с помощью "command" в docker-compose. В Dockerfile проблема в том, что запрос не подключен к базе данных... В скрипте команда выполняется заново при каждом запуске контейнера
Я бы хотел, чтобы эта команда выполнялась только один раз, но я не знаю, как действовать дальше.
Проблема в том, что контейнер перестраивается в моем конвейере ci/cd, если я изменяю конфигурационные файлы, и поэтому команда выполняется заново.
Я видел этот пост Запуск команды в контейнере Docker только при первом запуске но это также работает только если контейнер не перестраивается.
Обходной путь с командой createuperuser, которая не сработает, работал, и, похоже, это было в случае с предыдущими версиями django (до версии 4), но теперь у меня есть "django.db.utils.IntegrityError: UNIQUE constraint failed: auth_user.username", что говорит мне о том, что команда, похоже, выполняется несколько раз и дает мне ошибки в базе данных...
Вы можете использовать переменные среды для запуска createsuperuser
на основе этих переменных.
Если вы игнорируете возвращаемое значение команды, то не имеет значения, существует ли уже суперпользователь или нет. Кроме того, вам будет полезно быть уверенным, что определенный суперпользователь всегда существует.
Если вы измените переменные окружения, суперпользователь будет воссоздан с измененными значениями.
Смотрите похожий вопрос здесь: запускать начальные команды в службе docker-compose