Zeitzone in Docker-Container setzen

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.


  1. 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. 

  2. Sofern man den richtigen Host benutzt… 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kommentare abonnieren

Es erfolgt keine Weitergabe von Daten an externe Dienste wie WordPress.com.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.