Vue normale

Reçu hier — 25 juillet 2025

UNRAiD : Docker avec Alpine, forcer l’ajout de tzdata au boot et à la mise à jour

Par :Aerya
25 juillet 2025 à 19:30

L’intérêt d’un container Docker basé sur Alpine est de gagner de la place, beaucoup de place parfois, en partant d’une base très légère, dépourvue du superflu.
Sauf que de temps en temps, c’est pas pratique. J’ai migré mon AdGuardHome vers la version avec Redis et Unbound d’imTAIH.


✅ Avantages d’Unbound avec la prélecture (prefetching) :

  • Résolution DNS plus rapide : les enregistrements DNS fréquemment consultés sont résolus et mis en cache à l’avance.
  • Latence réduite : moins de délais liés aux requêtes DNS, idéal pour les applications sensibles au temps de réponse.
  • Meilleures performances réseau : les réponses étant déjà en cache, elles sont disponibles instantanément.


🧠 Avantages de l’utilisation de Redis :

Cache fiable : assure une réponse rapide même sous forte sollicitation.

Vitesse mémoire : Redis stocke les résultats DNS en mémoire pour un accès quasi instantané.

Débit optimisé : réduit la charge sur les serveurs DNS en évitant les requêtes répétitives.

Charge allégée : limite le nombre de requêtes vers l’extérieur.

Et donc c’est basé sur Alpine, qui n’embarque pas en standard tzdata 🙁

Ce qui ne m’arrange pas vu que je voudrais des logs d’AdGuardHome sur le bon fuseau horaire 🙂

Avec les Dockers de Linux Server, on peut ajouter des DOCKER_MODS. Là non. J’ai donc ajouté un script « AGH-tzdata » dans user-scripts qui installe tzdata et crée les dossiers nécessaires au boot de l’array et/ou à la MàJ du Docker que j’ai nommé AGH-Unbound-Redis.
Plus précisément, comme je tiens à passer par users-scripts et que du coup le script ne peut pas être relancé dès que le Docker est mis à jour, je fais en sorte que le script contrôle le Docker (tzdata installé etc) et si ce n’est pas le cas, il le fait. Le tout avec un log.

Le script : (mon fuseau est en dans le code directement : Europe/Paris)

#!/bin/bash

# Variables
CONTAINER="AGH-Unbound-Redis"
LOG_FILE="/var/log/agh-tz.log"
NOW=$(date "+%Y-%m-%d %H:%M:%S")

echo "[$NOW] Vérification du fuseau horaire dans $CONTAINER..." >> "$LOG_FILE"

# Vérifier si le Docker tourne
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
  echo "[$NOW] Le Docker $CONTAINER n'est pas lancé. Abandon." >> "$LOG_FILE"
  exit 0
fi

# Tester si tzdata installé
if docker exec "$CONTAINER" sh -c 'apk info tzdata >/dev/null 2>&1'; then
  echo "[$NOW]tzdata déjà installé." >> "$LOG_FILE"
else
  echo "[$NOW]Installation de tzdata..." >> "$LOG_FILE"
  docker exec "$CONTAINER" apk add --no-cache tzdata >> "$LOG_FILE" 2>&1
fi

# Configurer le fuseau horaire si incorrect
CURRENT_TZ=$(docker exec "$CONTAINER" date +"%Z")
if [ "$CURRENT_TZ" != "CEST" ] && [ "$CURRENT_TZ" != "CET" ]; then
  echo "[$NOW]Configuration du fuseau horaire Europe/Paris" >> "$LOG_FILE"
  docker exec "$CONTAINER" cp /usr/share/zoneinfo/Europe/Paris /etc/localtime
  docker exec "$CONTAINER" sh -c 'echo "Europe/Paris" > /etc/timezone'
else
  echo "[$NOW]Fuseau horaire déjà correct ($CURRENT_TZ)." >> "$LOG_FILE"
fi

# Reporter l'heure dans le log
CURRENT_DATE=$(docker exec "$CONTAINER" date)
echo "[$NOW]Heure actuelle dans le Docker : $CURRENT_DATE" >> "$LOG_FILE"
echo "----------------------------------------------------------" >> "$LOG_FILE"





Le rendu d’exécution dans le log :


[2025-07-25 19:44:01] Vérification du fuseau horaire dans AGH-Unbound-Redis...
[2025-07-25 19:44:01]tzdata déjà installé.
[2025-07-25 19:44:01]Fuseau horaire déjà correct (CEST).
[2025-07-25 19:44:01]Heure actuelle dans le Docker : Fri Jul 25 19:44:02 CEST 2025

Et contrôle de la date via la console :

root@HomeBox:/mnt/user/appdata# docker exec -it AGH-Unbound-Redis date
Fri Jul 25 19:46:45 CEST 2025

Je me remets sur l’article après le repas. Les logs affichent toujours 2h de retard.

Et… c’est là que je percute ! J’ai visiblement « digéré » avant de manger…

boulet

AdGuardHome utilise la timezone du navigateur dans les logs affichés. Timezone modifiée par mes paramètres stricts LibreWolf

librewolf

Sous un navigateur « propre », ça marche en effet impeccablement.

aghok

Bon, je laisse quand même mon script dont je suis content (avec sans doute trop de log d’ailleurs). Il me servira peut-être de base pour un autre souci avec un Docker basé sur Alpine ^^’

Loading

Reçu avant avant-hier

Au premier semestre, Renault évite l'accident industriel

L'INFO DU JOUR - Très attendus depuis son avertissement sur objectif il y a une semaine et le plongeon boursier qui s'en est suivi, les chiffres de ventes des six derniers mois sont plutôt rassurants pour l'ex-régie, grâce, notamment, au marché non européen et à la bonne vieille Clio qui se classe en tête des ventes en Europe.

Emmanuel Macron doit-il rouler en Alpine A390 ?

Alors qu’Emmanuel Macron vient d’étrenner son nouveau Rafale présidentiel, on se demande quelle sera la prochaine voiture qu’il devra promouvoir lors de ses sorties officielles. Le luxe à la française de la nouvelle DS N°8 ou la nouvelle vision du haut de gamme tricolore véhiculée par l’Alpine A390 ?

Renault : un départ pas si serein et un avenir incertain

L'INFO DU JOUR - Selon le média L'Informé, le départ de Luca de Meo, effectif depuis le 15 juillet, était loin d'être une surprise en interne. Un départ qui coïncide avec la nomination de son successeur par intérim, et l'annonce d'une dégradation de la marge opérationnelle au premier semestre.

Un rarissime Alpine cabriolet disponible à la vente

En été, impossible de rouler en Alpine GTA cheveux au vent ? La preuve que oui grâce à l'intervention il y a plusieurs décennies du tuneur allemand Pahenrich. Véhicule rare oblige, il se trouve chez un revendeur contre une coquette somme.

❌