Ich habe mich in den letzten Monaten mit der Konfiguration und dem Einsatz von Docker-Containern sowie der Erstellung entsprechender Images beschäftigt. Dabei bin ich auf – bisher – zwei Wege gestoßen, wie die Zeitzone (Time Zone) in unixoiden Container konfiguriert wird.
Zunächst dachte ich, dass diese beiden Ansätze jeweils bei der Erstellung der Images berücksichtigt werden müssen und sich daher ausschließen.
Nach etwas Rumspielen habe ich festgestellt, dass auf Linux-Hosts beide Ansätze funktionieren.
Konfiguration der Zeitzone des Containers
Der erste und wohl auch am meisten verbreitete Ansatz ist das Setzen der Environmentvariable TZ
(Beispiel -e TZ="Europe/Berlin"
), die vom Gast-OS im Container ausgewertet wird und zum Setzen der zutreffenden Zeitzone führt. Diese Lösung läuft auf allen Docker-Hosts.
Beim zweiten Ansatz wird die Datei /etc/localtime
des Hosts als Bind Volume an der entsprechenden Stelle im Dateisystem des Containers eingebunden (-v /etc/localtime:/etc/localtime:ro
). Dabei wird die Zeitzone des Hosts praktisch an den Container „vererbt“ und eine individuelle Konfiguration der Zeitzone für den Container ist nicht notwendig. Der Nachteil dieser Lösung ist, dass die Datei /etc/localtime
existent und lesbar sein muss. Dies ist bei Windows– und macOS1-Hosts nicht der Fall.
Anpassungen am Image
Als ich in meinem cups-airprint-Image den Zeitzonensupport ergänzen wollte, war ich überrascht, wie wenig Aufwand dafür notwendig ist: Man muss das Packet tzdata
ergänzen; sofern es nicht bereits eingebunden ist. Voilà!
Sobald der tzdata
-Support vorhanden ist, kann man ohne weitere Änderungen am Image die Zeitzone über beide der oben beschriebenen Wege konfigurieren.2
Wenn man neugierig oder verspielt ist, dann kann man das mit meinem Container Local Time Lab ausprobieren.
Ergebnis
Den Weg über das Einbinden von /etc/localtime
halte ich persönlich für die elegantere Variante, weil hier kein individueller Eingriff in die Konfiguration notwendig ist. Aber diese Variante birgt das Risiko, dass der Nutzer des Images auf den „falschen“ Host gesetzt hat und es schlicht weg nicht funktioniert.
Das Setzen der Environmentvariable TZ
ist weniger elegant und bedarf regelmäßig einer Anpassung durch den Nutzer, es dafür erheblich robuster.
-
Unter macOS gibt es zwar auch eine /etc/localtime‘, diese ist in der Grundkonfiguration jedoch nicht für Docker lesbar. Auch nach einer Änderung der Konfiguration gelang mir der Zugriff nicht. ↩
-
Sofern man den richtigen Host benutzt… ↩