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

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

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

S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires