Plan: Container Updates — May 2026
Status
State: Active Started: 2026-05-14
Context
The first run of check-updates.py report (from the shuttle branch) identified 9 available updates across 14 containers. Several images are significantly outdated:
| Service | Current | Latest | Gap | Risk |
|---|---|---|---|---|
| timescaledb | 2.7.1-pg14 |
2.19.3-pg14 |
+12 minor | 🔴 high |
| homeassistant | 2025.1.2 |
2025.12.5 |
+12 months | 🟡 medium |
| esphome | 2022.12.8 |
2026.4.5 |
+3.5 years | 🟢 low |
| influxdb | 2.8.0 |
2.9.1 |
+1 minor | 🔴 high |
| seafile-mysql | 11.8.5 |
11.8.6 |
patch | 🔴 high |
| seafile-redis | 8.4.0 |
8.6.3 |
+2 minor | 🔴 high |
| grafana | 11.4.0 |
11.6.14 |
+2 patch | 🟢 low |
| borgmatic | v1.1.10-1.4.21 |
v1.1.17-1.5.18 |
+1 patch | 🟢 low |
| dns-ad-blocker | latest |
armhf |
rolling | 🟢 low (planned for replacement) |
Shuttle applied similar updates successfully including grafana 11.4 → 11.6, authentik, photoprism, mosquitto.
Goals
- [ ] Apply all patch-level updates (low risk) immediately
- [ ] Apply minor updates after review and testing
- [ ] Defer major version upgrades requiring migration paths (timescaledb major, homeassistant major)
Steps
Step 1: Patch-Level Updates (Low Risk)
These are within the same major/minor version track and can be applied directly:
| Service | Update | Compose File |
|---|---|---|
| grafana | 11.4.0 → 11.6.14 |
compose.grafana.yaml |
| borgmatic | v1.1.10-1.4.21 → v1.1.17-1.5.18 |
compose.borgmatic.yaml |
| seafile-mysql | 11.8.5 → 11.8.6 |
compose.seafile.yaml |
# For each update:
docker compose -f compose.<service>.yaml pull
docker compose -f compose.<service>.yaml up -d
docker compose -f compose.<service>.yaml ps # verify healthy
- Verification:
docker psshows(healthy), service responds correctly
Step 2: Minor Updates (Medium Risk)
| Service | Update | Notes |
|---|---|---|
| influxdb | 2.8.0 → 2.9.1 |
Compatible within 2.x series. Verify health. |
| homeassistant | 2025.1.2 → 2025.12.5 |
Core automation — test in low-traffic window |
| seafile-redis | 8.4.0 → 8.6.3 |
Compatible within 8.x. Verify Seafile still works. |
Apply one at a time, verify health after each:
docker compose -f compose.<service>.yaml pull <service>
docker compose -f compose.<service>.yaml up -d <service>
docker logs --tail 20 <container> # verify no errors
docker compose ps # check healthy
- Verification: Each service reports healthy, dependent services still connect
Step 3: Major Version Updates (Requires Planning)
| Service | Update | Challenge |
|---|---|---|
| esphome | 2022.12.8 → 2026.4.5 |
Dashboard at 6052, host networking. May have breaking config changes. Back up configs first. |
| timescaledb | 2.7.1-pg14 → 2.19.3-pg14 |
PostgreSQL minor version jump (pg14). TimescaleDB upgrades can involve migration commands. Requires downtime. |
timescaledb upgrade process:
1. Back up database: docker exec timescaledb pg_dumpall -U postgres > /tmp/timescaledb-backup.sql
2. Pull new image: docker compose pull timescaledb
3. Run upgrade tool if needed: TimescaleDB 2.7 → 2.19 may require timescaledb-tune
4. Upgrade: docker compose up -d timescaledb
5. Verify: check Grafana data sources and queries still work
esphome upgrade process:
1. Back up /opt/esphome/ configs
2. Compile a test device first to verify API compatibility
3. Update image tag, restart, check dashboard loads
- Verification: Historical data still queryable, dashboards render, no data loss
Step 4: dns-ad-blocker
Skip updates — planned for full replacement (see separate plan: dns-ad-blocker-migration).
Step 5: Schedule Recurring Checks
Set up a cron job or systemd timer for weekly check-updates.py report:
# In /ansible/sepia/setup_crontab.yml or HERMES heartbeat
# Weekly: run check-updates.py report on Sunday morning at 8:00
- Verification: Report appears weekly in
REFERENCE/container-updates/
Rollback
For any failed update:
# Revert the image tag in the compose file via git
git checkout -- compose.<service>.yaml
docker compose -f compose.<service>.yaml up -d
For timescaledb data restore:
docker exec -i timescaledb psql -U postgres < /tmp/timescaledb-backup.sql
Related
- REFERENCE/container-updates/2026-05-14-container-updates.md
- scripts/container-updates/check-updates.py
- PLANS/active/dns-ad-blocker-migration.md
Created: 2026-05-14