[2026-09-20] eagle: family/how-to/arr-stack-kraken.md family/how-to/kraken-watchtower.md family/how-to/openmediavault-rpi5.md personal/tech/docker-data-root-mount-race.md personal/tech/watchtower-docker-updates.md
This commit is contained in:
1 parent
4e656430ac
commit
71ccf6a456
5 files changed
+328
-1
No files matched your search
@@ -355,6 +355,74 @@ sudo docker start prowlarr
|
||||
- `POST /api/v3/indexer/test` с телом `{"indexerId":N}` → HTTP 400 (валидирует как НОВЫЙ индексер, требует Name/Implementation). Для теста всех сразу: `POST /api/v3/indexer/testall`.
|
||||
- `GET /api/v1/health` в Prowlarr и `/api/v1/indexerstatus` НЕ показывают причины блокировки. Смотреть `.../docker/prowlarr/config/logs/prowlarr.debug.txt` (grep по имени индексера и `Cloudflare`/`403`).
|
||||
|
||||
## Обновление Radarr / Sonarr (2026-09-20)
|
||||
|
||||
Watchtower их не обновлял (см. [[family/how-to/kraken-watchtower]]), поэтому обновлено вручную:
|
||||
**Radarr 6.1.1.10360 → 6.4.4.10685**, **Sonarr 4.0.17.2952 → 4.0.20.3014**.
|
||||
|
||||
```bash
|
||||
# Sonarr — метаданные проекта правильные, обычный up:
|
||||
cd /srv/.../docker/sonarr && sudo docker compose pull sonarr && sudo docker compose up -d sonarr
|
||||
```
|
||||
|
||||
### ⚠️ Ловушка: Radarr принадлежал ЧУЖОМУ compose-проекту
|
||||
|
||||
`docker compose up -d radarr` из `docker/radarr/` падал:
|
||||
`Conflict. The container name "/radarr" is already in use`.
|
||||
|
||||
Причина: контейнеры `radarr` и `transmission` были созданы **17.05.2026 из общего проекта `docker`** (файл `/srv/.../docker/docker-compose.yml`, **сейчас его нет — удалён**). Метаданные: `com.docker.compose.project=docker`. При этом `docker/radarr/docker-compose.yml` существовал и не использовался.
|
||||
|
||||
Проверка, к какому проекту принадлежит контейнер:
|
||||
```bash
|
||||
sudo docker inspect radarr -f '{{index .Config.Labels "com.docker.compose.project"}} {{index .Config.Labels "com.docker.compose.project.config_files"}}'
|
||||
```
|
||||
|
||||
Фикс (**данные в `config/` не трогаются**, только контейнер):
|
||||
```bash
|
||||
sudo docker stop radarr && sudo docker rm radarr
|
||||
cd /srv/.../docker/radarr && sudo docker compose up -d radarr
|
||||
# стало: project=radarr file=.../docker/radarr/docker-compose.yml, сеть media_net
|
||||
```
|
||||
`transmission` остался в проекте `docker` (его compose-файл в `docker/transmission/`), но подключён к `media_net` — работает.
|
||||
|
||||
### Диагностические грабли (Radarr/Sonarr API)
|
||||
|
||||
- `POST /api/v3/indexer/test` с телом `{"indexerId":N}` → **HTTP 400** (валидирует как НОВЫЙ индексер, требует Name/Implementation/AppProfileId). Использовать **`POST /api/v3/indexer/testall`**.
|
||||
- То же для клиентов: **`POST /api/v3/downloadclient/testall`**.
|
||||
- Триггер `UrlBase`: Radarr `/radarr/api/v3/...`, Sonarr `/sonarr/api/v3/...`.
|
||||
|
||||
### Итоговое состояние compose-проектов и сетей (2026-09-20)
|
||||
|
||||
После всех правок важно, потому что **`docker compose up -d` надо запускать из своего каталога**, иначе будет конфликт имени контейнера.
|
||||
|
||||
| Контейнер | Compose-проект | Файл | Сеть |
|
||||
|---|---|---|---|
|
||||
| radarr | `radarr` ✅ | `docker/radarr/docker-compose.yml` | `media_net` |
|
||||
| sonarr | `sonarr` ✅ | `docker/sonarr/docker-compose.yml` | `media_net` |
|
||||
| prowlarr | `prowlarr` ✅ | `docker/prowlarr/docker-compose.yml` | `media_net` |
|
||||
| flaresolverr | (в том же файле prowlarr) | `docker/prowlarr/docker-compose.yml` | `media_net` |
|
||||
| transmission | `docker` ⚠️ | `docker/transmission/docker-compose.yml` | `docker_default` + `media_net` |
|
||||
| watchtower | `watchtower` | `docker/watchtower/docker-compose.yml` | — |
|
||||
|
||||
⚠️ `transmission` остался в проекте `docker` (создан 17.05.2026 из удалённого ныне `docker/docker-compose.yml`). Его compose-файл существует, но **не используется** — при `up -d` из `docker/transmission/` будет тот же конфликт имени, что был у radarr. Чинить так же: `stop` → `rm` → `up -d` из своего каталога (данные в `config/` не трогаются).
|
||||
|
||||
Проверка принадлежности любого контейнера:
|
||||
```bash
|
||||
sudo docker inspect <name> -f '{{index .Config.Labels "com.docker.compose.project"}} {{index .Config.Labels "com.docker.compose.project.config_files"}}'
|
||||
```
|
||||
|
||||
### Версии после обновления (2026-09-20)
|
||||
|
||||
| Сервис | Версия |
|
||||
|---|---|
|
||||
| Radarr | **6.4.4.10685** |
|
||||
| Sonarr | **4.0.20.3014** |
|
||||
| Prowlarr | **2.6.5.5623** |
|
||||
| FlareSolverr | 3.5.2 |
|
||||
| Watchtower | **1.22.2** (`nickfedor/watchtower`, см. [[family/how-to/kraken-watchtower]]) |
|
||||
|
||||
Автообновлением занимается Watchtower — **проверить его конфиг перед тем, как ждать обновлений**: [[family/how-to/kraken-watchtower]], теория — [[personal/tech/watchtower-docker-updates]].
|
||||
|
||||
## Notes
|
||||
|
||||
- See [[arr-stack-taiga]] for Taiga (secondary) arr stack
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
---
|
||||
updated: '2026-09-20'
|
||||
title: Watchtower — Kraken
|
||||
created: '2026-09-20'
|
||||
type: tech
|
||||
namespace: family
|
||||
tags:
|
||||
- watchtower
|
||||
- docker
|
||||
- updates
|
||||
- infra
|
||||
- kraken
|
||||
related:
|
||||
- '[[family/how-to/arr-stack-kraken]]'
|
||||
- '[[personal/tech/watchtower-docker-updates]]'
|
||||
- '[[personal/tech/jellyfin-db-schema-mismatch]]'
|
||||
- '[[personal/tech/docker-data-root-mount-race]]'
|
||||
---
|
||||
# Watchtower на Kraken (RPi5 / OMV / arm64)
|
||||
|
||||
> **Создано:** 2026-09-20. **Статус:** ✅ работает, версия 1.22.2 (форк nickfedor).
|
||||
> ⏳ **Открытый пункт:** `--label-enable` включён, но label НЕТ ни у одного контейнера → **сейчас Watchtower не обновит ничего**. Ждёт решения Alex: вариант 1 (повесить label на radarr/sonarr/prowlarr/flaresolverr) или вариант 2 (убрать `--label-enable`, обновлять все 12).
|
||||
> **Связанные:** [[family/how-to/arr-stack-kraken]], [[personal/tech/watchtower-docker-updates]] (реюзабельная теория), [[personal/tech/jellyfin-db-schema-mismatch]], [[personal/tech/docker-data-root-mount-race]]
|
||||
|
||||
## Что было сломано (2026-09-20)
|
||||
|
||||
Watchtower стоял на `containrrr/watchtower` **без единого флага** и **не обновил ни один контейнер за ~2.5 месяца**.
|
||||
|
||||
Четыре независимые причины:
|
||||
|
||||
| # | Причина | Как выглядело в логе |
|
||||
|---|---|---|
|
||||
| 1 | Не задан `--interval` | `Scheduling first run: ... in 23 hours 59 minutes` — каждый рестарт контейнера сбрасывал таймер, а рестарты были |
|
||||
| 2 | `DOCKER_API_VERSION=1.40` (старый API) | `Unable to update container "/prowlarr": no available image info` |
|
||||
| 3 | Образ `containrrr/watchtower` мёртв | last push **2023-11-11** (проверено через Docker Hub API) |
|
||||
| 4 | Нет label на целевых контейнерах | `Scanned=12 Updated=0` |
|
||||
|
||||
Итог до фикса: `Session done Failed=0 Scanned=12 Updated=0`, а единственная попытка обновления упала с `no available image info`.
|
||||
|
||||
## Фикс (ВЫПОЛНЕН 2026-09-20)
|
||||
|
||||
`containrrr/watchtower` → **`nickfedor/watchtower:1.22.2`** (активный форк; у containrrr последний push 2023-11-11).
|
||||
|
||||
```bash
|
||||
D=/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/docker/watchtower
|
||||
sudo cp $D/docker-compose.yml /home/kraken/arr-fix-backup-20260920/watchtower-compose.bak
|
||||
cd $D && sudo docker compose pull watchtower && sudo docker compose up -d watchtower
|
||||
```
|
||||
|
||||
Compose (`docker/watchtower/docker-compose.yml`):
|
||||
```yaml
|
||||
services:
|
||||
watchtower:
|
||||
image: nickfedor/watchtower:1.22.2
|
||||
container_name: watchtower
|
||||
restart: always
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
command: --interval 86400 --cleanup --label-enable
|
||||
# DOCKER_API_VERSION=1.40 УДАЛЁН — именно он ломал обновление
|
||||
```
|
||||
|
||||
Флаги:
|
||||
- `--interval 86400` — явные 24ч (без флага таймер сбрасывался каждым стартом)
|
||||
- `--cleanup` — удалять старые образы (диск на 87%, иначе забьёт)
|
||||
- `--label-enable` — обновлять ТОЛЬКО контейнеры с label `com.centurylinklabs.watchtower.enable=true`
|
||||
|
||||
## Проверка (обязательна — «запущено» ≠ «работает»)
|
||||
|
||||
```bash
|
||||
# 1) версия и API
|
||||
sudo docker logs --tail 20 watchtower
|
||||
# → Watchtower 1.22.2 using Docker API v1.54 (был v1.40)
|
||||
# → Next scheduled run: ... in 23 hours 59 minutes ← таймер виДЕН
|
||||
|
||||
# 2) РЕАЛЬНЫЙ прогон без изменений
|
||||
sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
|
||||
nickfedor/watchtower:1.22.2 --run-once --monitor-only
|
||||
# → Update session completed failed=0 scanned=13 updated=0
|
||||
# → "Found new image" container=transmission ← баг no-available-image-info ВЫЛЕЧЕН
|
||||
```
|
||||
|
||||
## ⚠️ КРИТИЧНО: `--label-enable` и Jellyfin
|
||||
|
||||
**Watchtower уже один раз сломал Jellyfin** (см. [[personal/tech/jellyfin-db-schema-mismatch]]): переключил мажорную версию 10.11.8 → 12.1, БД мигрировала вперёд, сервер перестал стартовать с `no such column: p.Permission_Permissions_Guid`, Jellyfin отдавал 503.
|
||||
|
||||
Поэтому **Jellyfin нельзя давать в автообновление без пина тега**. Если ставить ему label — сначала заменить `image: jellyfin/jellyfin` (без тега = latest) на пиновый, например `jellyfin/jellyfin:12.1`.
|
||||
|
||||
Правило: `latest` + автомажор = риск сломать БД (EF Core не умеет даунгрейд схемы). Для сервисов с миграциями БД пинить мажорную версию.
|
||||
|
||||
## Диагностика Watchtower
|
||||
|
||||
```bash
|
||||
sudo docker ps --format "{{.Names}}\t{{.Image}}\t{{.Status}}" | grep watchtower
|
||||
sudo docker logs --tail 40 watchtower
|
||||
# кто помечен для автообновления:
|
||||
for c in $(sudo docker ps --format "{{.Names}}"); do
|
||||
echo "$c -> $(sudo docker inspect $c -f '{{index .Config.Labels "com.centurylinklabs.watchtower.enable"}}')"
|
||||
done
|
||||
```
|
||||
|
||||
Грабли:
|
||||
- `Unable to update container: no available image info` — старый `DOCKER_API_VERSION`, либо несовместимость containrrr-версии с новым dockerd.
|
||||
- **Рестарт контейнера сбрасывает таймер** — без `--interval` это делает Watchtower бесполезным.
|
||||
- `--run-once` **нельзя** запускать без `--monitor-only`, если не хочешь реальных обновлений.
|
||||
- Watchtower пишет в stdout (`docker logs`), в отличие от Jellyfin.
|
||||
|
||||
## Бэкап
|
||||
|
||||
`/home/kraken/arr-fix-backup-20260920/watchtower-compose.bak` + остальные бэкапы в той же папке:
|
||||
- `radarr-config-preupgrade.tar.gz` (58M), `sonarr-config-preupgrade.tar.gz` (20M), `prowlarr-config-preupgrade.tar.gz` (3.9M)
|
||||
- `prowlarr.db.bak`, `watchtower-compose.bak`, `networks.txt`, 4× `<container>-inspect.json`, 3× compose-файла
|
||||
|
||||
## Что дальше (открытые пункты)
|
||||
|
||||
| # | Пункт | Статус |
|
||||
|---|---|---|
|
||||
| 1 | Решить вариант 1 / вариант 2 для `--label-enable` и проставить label | ⏳ ждёт Alex |
|
||||
| 2 | `Allowed Hosts is not configured` warning в Radarr/Sonarr/Prowlarr — ограничить, какие hostname могут обращаться | ⏳ отдельная задача |
|
||||
| 3 | Найдены новые образы при прогоне: `portainer`, `cloudflared`, `transmission` — обновить при необходимости | ℹ️ не делалось (transmission без label, portainer/cloudflared — свои тонкости) |
|
||||
| 4 | Home Assistant на Kraken — `Exited (128)` ~2 месяца, не поднимался (см. [[family/how-to/kraken-access]]) | ⏳ отдельная задача |
|
||||
|
||||
## Теория (реюзабельно)
|
||||
|
||||
Общие причины «Watchtower не обновляет» без привязки к Kraken — [[personal/tech/watchtower-docker-updates]].
|
||||
@@ -272,7 +272,7 @@ cd /home/kraken/<name> && sudo docker compose restart # рестарт
|
||||
cd /home/kraken/<name> && sudo docker compose pull && sudo docker compose up -d # обновить
|
||||
```
|
||||
|
||||
> ⚠️ Watchtower: нужна переменная `DOCKER_API_VERSION=1.54` — иначе крашится (API mismatch)
|
||||
> ⚠️ Watchtower: `DOCKER_API_VERSION` **убирать** (2026-09-20). Ранее здесь стояло `DOCKER_API_VERSION=1.40`, и именно он вместе с «no available image info» ломал обновление. Пиннинг версии API вообще не нужен — новая версия Watchtower сама согласует её с dockerd (`using Docker API v1.54`). Полный разбор: [[family/how-to/kraken-watchtower]], теория — [[personal/tech/watchtower-docker-updates]].
|
||||
> ⚠️ sudo через SSH требует `< /dev/null` для каждой команды с tee/pipe
|
||||
|
||||
---
|
||||
|
||||
@@ -95,6 +95,8 @@ ssh kraken 'docker ps -q | wc -l' # ожидаем ~12, НЕ 0
|
||||
|
||||
> ⚠️ **Не путать с другим дефектом:** после этого reboot `jellyfin` поднялся, но отдавал **503** — это **отдельная** проблема (сервер старше БД, `no such column: p.Permission_Permissions_Guid`), НЕ связанная с гонкой монтирования. См. [[personal/tech/jellyfin-db-schema-mismatch]]. При диагностике «сервис не работает после reboot» различать: контейнер не поднялся (гонка) vs поднялся, но падает внутри (своя ошибка приложения).
|
||||
|
||||
> ℹ️ **Обновление 2026-09-20 (позже в тот же день):** `radarr` был **пересоздан** (переведён из общего проекта `docker` в свой `docker/radarr`, обновлён до 6.4.4) — см. [[family/how-to/arr-stack-kraken]]. `watchtower` сменил образ на `nickfedor/watchtower:1.22.2` — см. [[family/how-to/kraken-watchtower]]. Число контейнеров и их состав могли измениться; проверка `docker ps -q | wc -l` по-прежнему корректна как индикатор гонки, но ожидаемое число сверять заново.
|
||||
|
||||
## Крон не догоняет пропущенное окно
|
||||
|
||||
Общий питфолл для сервисов на этом узле: если Kraken лежал, cron-задачи (бэкап `0 4 * * *`, t610-подобные) **пропускаются без компенсации**. Для критичных — добавлять `@reboot`-строку с проверкой «артефакт за сегодня уже есть?».
|
||||
|
||||
@@ -0,0 +1,132 @@
|
||||
---
|
||||
title: Watchtower — почему не обновляет контейнеры
|
||||
created: '2026-09-20'
|
||||
updated: '2026-09-20'
|
||||
type: tech
|
||||
namespace: personal
|
||||
tags: [watchtower, docker, updates, infra, pitfall]
|
||||
related:
|
||||
- "[[family/how-to/kraken-watchtower]]"
|
||||
- "[[personal/tech/docker-data-root-mount-race]]"
|
||||
- "[[personal/tech/jellyfin-db-schema-mismatch]]"
|
||||
---
|
||||
|
||||
# Watchtower — почему не обновляет контейнеры
|
||||
|
||||
Реюзабельная теория. Живой разбор на Kraken — в [[family/how-to/kraken-watchtower]].
|
||||
|
||||
**Главный вывод: `docker ps` показывает `Up (healthy)` — это ничего не говорит о том, что Watchtower хоть раз что-то обновил.** Отсутствие обновлений не даёт ни ошибки, ни алерта. На Kraken Watchtower «работал» 2.5 месяца и не обновил ни один из 12 контейнеров.
|
||||
|
||||
## Четыре причины (проверять в этом порядке)
|
||||
|
||||
### 1. Не задан `--interval` → таймер сбрасывается каждым стартом
|
||||
Без флага интервал = 24ч **от момента старта процесса**. Любой рестарт контейнера (reboot, `docker restart`, обновление самого Watchtower) обнуляет отсчёт. Если контейнер рестартуют чаще раза в сутки — **проверка не наступает никогда**.
|
||||
|
||||
Признак в логе:
|
||||
```
|
||||
level=info msg="Scheduling first run: ... in 23 hours, 59 minutes, 59 seconds"
|
||||
level=info msg="Waiting for running update to be finished..."
|
||||
```
|
||||
Вторая строка — процесс проснулся, увидел незавершённый апдейт и **снова уснул**. Признак, что цикл заклинило.
|
||||
|
||||
**Фикс:** `--interval 86400` явно, либо `--schedule "0 0 4 * * *"` (cron-синтаксис из 6 полей), если нужен запуск в тихое время.
|
||||
|
||||
### 2. `DOCKER_API_VERSION` запинен на старую версию
|
||||
`DOCKER_API_VERSION=1.40` в environment **ломает** чтение метаданных образа. Симптом:
|
||||
```
|
||||
level=info msg="Found new lscr.io/linuxserver/prowlarr:latest image (3e9bd62ca90c)"
|
||||
level=info msg="Unable to update container \"/prowlarr\": no available image info. Proceeding to next."
|
||||
```
|
||||
Watchtower **нашёл** новый образ, но не может обновиться. В новых версиях API показывается сам: `using Docker API v1.54`.
|
||||
|
||||
**Фикс:** убрать `DOCKER_API_VERSION` из environment вообще. Watchtower сам согласует версию с dockerd.
|
||||
|
||||
### 3. Образ `containrrr/watchtower` не развивается
|
||||
Last push `containrrr/watchtower` — **2023-11-11** (проверено Docker Hub API). Он несовместим с современным dockerd, отсюда и `no available image info` — это не только про API-версию.
|
||||
|
||||
**Фикс:** активный форк `nickfedor/watchtower` (актуальная версия 1.22.2, теги `latest`, `nightly`, semver).
|
||||
|
||||
```bash
|
||||
# проверить дату образа
|
||||
curl -s "https://hub.docker.com/v2/repositories/containrrr/watchtower/tags?page_size=5" \
|
||||
| jq -r '.results[] | "\(.name) updated=\(.last_updated)"'
|
||||
|
||||
# проверить поддержку своей архитектуры (например arm64 для RPi)
|
||||
curl -s "https://hub.docker.com/v2/repositories/nickfedor/watchtower/tags/1.22.2" \
|
||||
| jq -r '.images[] | "\(.architecture) \(.os)"'
|
||||
```
|
||||
|
||||
### 4. `--label-enable` без единого label → не обновит НИЧЕГО
|
||||
С флагом `--label-enable` Watchtower трогает только контейнеры с label
|
||||
`com.centurylinklabs.watchtower.enable=true`. Если label нет ни у кого — **сам по себе флаг делает Watchtower бесполезным**.
|
||||
|
||||
Проверка, кто помечен:
|
||||
```bash
|
||||
for c in $(docker ps --format "{{.Names}}"); do
|
||||
echo "$c -> $(docker inspect $c -f '{{index .Config.Labels "com.centurylinklabs.watchtower.enable"}}')"
|
||||
done
|
||||
```
|
||||
⚠️ `docker inspect` на контейнере без label вернёт **пустую строку**, а не «false» — не путать с `false` (явное отключение).
|
||||
|
||||
## Рабочий конфиг
|
||||
|
||||
```yaml
|
||||
services:
|
||||
watchtower:
|
||||
image: nickfedor/watchtower:1.22.2
|
||||
container_name: watchtower
|
||||
restart: always
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
command: --interval 86400 --cleanup --label-enable
|
||||
# НЕ добавлять DOCKER_API_VERSION
|
||||
```
|
||||
- `--interval 86400` — сутки, видно в логе рядом со `Next scheduled run`
|
||||
- `--cleanup` — удалять старые образы; без него диск забивается (на Kraken 87%)
|
||||
- `--label-enable` — оптин: обновляется только то, что явно помечено
|
||||
|
||||
## Проверка (обязательна)
|
||||
|
||||
`Up` + отсутствие ошибок ≠ работа. Нужен живой прогон:
|
||||
```bash
|
||||
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
|
||||
nickfedor/watchtower:1.22.2 --run-once --monitor-only
|
||||
```
|
||||
`--monitor-only` обязателен, иначе `--run-once` **реально обновит** контейнеры.
|
||||
|
||||
Что должно быть в выводе:
|
||||
```
|
||||
level=info msg="Watchtower 1.22.2 using Docker API v1.54"
|
||||
level=info msg="Found new image" container=<X> new_id=<...>
|
||||
level=info msg="Update session completed" failed=0 scanned=N skipped=0 updated=0
|
||||
```
|
||||
`Found new image` = баг с метаданными вылечен. `updated=0` в monitor-only — нормально.
|
||||
|
||||
## ⚠️ Автообновление может сломать сервис: пинить мажор версии
|
||||
|
||||
Тип `latest` + автообновление = переход на новую **мажорную** версию без предупреждения. Для сервисов с миграциями БД (EF Core, Prisma, любые forward-only миграции) это необратимо:
|
||||
|
||||
- Jellyfin на Kraken: `latest` уехал 10.11.8 → 12.1, БД мигрировала вперёд, откатить схему нельзя → сервер отдавал **503**, `no such column: ...`. Детали: [[personal/tech/jellyfin-db-schema-mismatch]].
|
||||
|
||||
**Правило:** сервисам с БД и миграциями — пиновый тег (`image: jellyfin/jellyfin:12.1`), НЕ `latest` + watchtower. Либо не давать им label, либо сначала пин.
|
||||
|
||||
## Питфоллы диагностики
|
||||
|
||||
- `docker logs watchtower` — Watchtower пишет в **stdout**, в отличие от Jellyfin (тот пишет в файл). Смотреть логи легко.
|
||||
- Таймстемпы в логе Watchtower — **UTC**, локальное время сервиса может быть другим.
|
||||
- Единожды увиденный `Found new image` не значит, что обновление применилось — нужна следующая строка (`Unable to update` / `Updated`).
|
||||
- Проверять надо **фактическую** дату запущенного образа, а не тег:
|
||||
```bash
|
||||
docker inspect <container> -f '{{index .Config.Labels "org.opencontainers.image.version"}}'
|
||||
docker inspect <container> -f '{{index .Config.Labels "build_version"}}'
|
||||
```
|
||||
|
||||
## Урок
|
||||
|
||||
Watchtower — компонент, который **молча не работает**. Его нельзя «поставить и забыть»: обязательны (а) явный `--interval`, (б) отсутствие `DOCKER_API_VERSION`, (в) периодический `--run-once --monitor-only` как health-check, (г) осознанное решение, каким контейнерам вообще разрешено автообновление.
|
||||
|
||||
## Связанные
|
||||
|
||||
- [[family/how-to/kraken-watchtower]] — живой разбор и точные команды на Kraken
|
||||
- [[personal/tech/jellyfin-db-schema-mismatch]] — что ломает автообновление мажора
|
||||
- [[personal/tech/docker-data-root-mount-race]] — другой дефект «контейнеры пропали»
|
||||
Reference in new issue
Block a user