fix(compose): устранена гонка сборки общих образов
- Зачем: - make up иногда падал, когда несколько служб параллельно экспортировали один тег образа. - Что: - сборка образов Airflow и Superset закреплена за службами инициализации. - зависимые службы только используют готовый образ, решение описано в ADR 0001. - Проверка: - make config-test. - docker compose --progress plain build superset superset-init airflow-scheduler airflow-init. - два запуска make up прошли экспорт трёх уникальных тегов без image already exists.
This commit is contained in:
1 parent
5946175efa
commit
1f203c974d
2 files changed
+14
-4
No files matched your search
+7
-4
@@ -50,8 +50,6 @@ x-world-starting-days: &world-starting-days "8"
|
||||
|
||||
x-airflow-common: &airflow-common
|
||||
image: clickstream-airflow:local
|
||||
build:
|
||||
context: ./infra/airflow
|
||||
environment:
|
||||
AIRFLOW__CORE__EXECUTOR: LocalExecutor
|
||||
AIRFLOW__CORE__PARALLELISM: "4"
|
||||
@@ -105,8 +103,6 @@ x-generator-common: &generator-common
|
||||
|
||||
x-superset-common: &superset-common
|
||||
image: clickstream-superset:local
|
||||
build:
|
||||
context: ./infra/superset
|
||||
environment:
|
||||
SUPERSET_CONFIG_PATH: /app/pythonpath/superset_config.py
|
||||
SUPERSET_SECRET_KEY: ${SUPERSET_SECRET_KEY:?Скопируйте .env.example в .env}
|
||||
@@ -257,6 +253,10 @@ services:
|
||||
|
||||
airflow-init:
|
||||
<<: *airflow-common
|
||||
# Общий образ собирает один владелец. Остальные службы зависят от init и
|
||||
# не запускают параллельный экспорт того же тега через Buildx.
|
||||
build:
|
||||
context: ./infra/airflow
|
||||
user: "0:0"
|
||||
restart: "no"
|
||||
depends_on:
|
||||
@@ -340,6 +340,9 @@ services:
|
||||
|
||||
superset-init:
|
||||
<<: *superset-common
|
||||
# Superset использует тот же образ после успешной подготовки.
|
||||
build:
|
||||
context: ./infra/superset
|
||||
restart: "no"
|
||||
healthcheck:
|
||||
disable: true
|
||||
|
||||
@@ -16,6 +16,13 @@
|
||||
возвращает единицу — поведение проверено при исполнении #37. Зависимость
|
||||
включает результат подготовки в общий граф ожидания.
|
||||
|
||||
Каждый общий локальный образ собирает одна служба: `airflow-init` владеет
|
||||
сборкой образа Airflow, `superset-init` — образа Superset. Зависимые процессы
|
||||
только используют готовый образ. `docker compose up --build` собирает образы
|
||||
до запуска контейнеров; повторять `build` у каждого процесса не нужно, а
|
||||
Buildx 0.30.1 при параллельном экспорте одного тега иногда отвечает
|
||||
`image already exists`.
|
||||
|
||||
Для входа выбран SimpleAuthManager. У него нет команды создания пользователя,
|
||||
поэтому `airflow-init` записывает пароль администратора из окружения в
|
||||
JSON-файл отдельного тома `airflow_auth`. Новый именованный том принадлежит
|
||||
|
||||
Reference in new issue
Block a user