Docker-Zeitzone

 6. Juni 2024 •  Ekkart •  Computer, Docker •  Computer

An sich ist mir die Zeitzone von Docker-Containern egal, brauche ich selten.

Außer hier auf den Rauhen Sitten, da ich die Seite mit Docker erzeuge und diejenigen Postings nicht erzeugt werden, die in der Zukunft liegen. Das ist datumbasiert.

Dieser Beitrag wird also ab dem 06.06.2024 erzeugt, wenn ich ihn aber kurz nach Mitternacht erzeuge, erscheint er nicht. Das liegt an der Zeitzone, die auf meinem Rechner in Europa liegt, im Container aber nicht, dort ist es dann noch nicht der 06.06.2024.

Meine Beiträge werden üblicherweise kurz nach Mitternacht geschrieben, also muss ich mich doch mit Zeitzonen beschäftigen 🤷

Wie ich herausgefunden habe, liegt das Problem nicht am Docker-Container, sondern daran, dass die Zeitzone der Webseite in der config angegeben werden muss, damit diese berücksichtigt werden kann:

{
	"foo": "foo",
	"timeZone": "Europe/Berlin",
	"foo": "foo"
}

Dann kann hugo das auch erzeugen.

Aber: bevor ich drauf gekommen bin, hab ich mich mit der Zeitzone von Docker-Containern beschäftigt und folgendes gelernt:

Die einfachste Art ist es, beim Aufruf die lokale Zeitzone, die unter Linux in den Dateien

/etc/timezone
/etc/localtime

abgelegt ist, als Volume beim Aufruf in den Container einzubinden, schön read-only, damit der Container nix überschreibt:

--volume /etc/timezone:/etc/timezone:ro \
--volume /etc/localtime:/etc/localtime:ro \

Mit docker-compose:

services:
	service_name:
		volumes:
			- "/etc/timezone:/etc/timezone:ro"
			- "/etc/localtime:/etc/localtime:ro"

Gefunden bei ArthurHoaro, mein Aufruf wäre dann:

docker run \
	--rm \
	--user "$(id -u):$(id -g)" \
	--name hugo \
	--volume "${PWD}/hugo:/src/hugo" \
	--volume /etc/timezone:/etc/timezone:ro \
	--volume /etc/localtime:/etc/localtime:ro \
	--publish 1313:1313 \
	ekleinod/hugo \
		--cleanDestinationDir \
		--printI18nWarnings \
		--printPathWarnings \
		--gc \
		--environment production \
		--source hugo \
			"$@"

Eine andere Möglichkeit, die dort beschrieben ist, ist es, die Zeitzone beim Aufruf als Umgebungsvariable zu übergeben, hab ich noch nicht ausprobiert, kann also noch nicht sagen, wo die Vor- und Nachteile beider Lösungen sind.