Ich habe eine Docker-Compose-Datei, auf der einige Docker-Dateien ausgeführt werden, um meine Container zu erstellen. Ich möchte meine Dockerfiles nicht bearbeiten, um Zeitzonen festzulegen, da sie sich jederzeit von Mitgliedern meines Teams ändern können und ich eine Docker-compose.override.yml-Datei habe, um Änderungen an der lokalen Umgebung vorzunehmen. Einer meiner Container (ein auf Selen basierender Container) scheint jedoch die Host-Zeitzone nicht zu beeinträchtigen, und das verursacht Probleme für mich. Darauf basierend möchte ich Zeitzonen für alle meine Container erzwingen. In meinen Dockerfiles mache ich das jetzt
ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
Und alles funktioniert gut. Wie repliziere ich denselben Befehl in der Docker-Compose-Syntax?
version "2"
services:
serviceA:
...
environment:
TZ: "America/Denver"
command: >
sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &&
echo $TZ > /etc/timezone &&
exec my-main-application"
Edit: Die Frage hat nicht danach gefragt, aber ich habe gerade exec my-main-application
hinzugefügt, um zu zeigen, wie der Hauptprozess angegeben wird. exec
ist hier wichtig, um sicherzustellen, dass my-main-application
Ctrl-C (SIGINT/SIGKILL) empfängt.
Die einfachste Lösung wäre ein Freigabevolumen in docker-compose.yml wie diesem
ipchanger:
image: codertarasvaskiv/ipchanger:raspberry
volumes:
- "/etc/localtime:/etc/localtime:ro"
Dies ist eine einfache Lösung:
environment:
- TZ=America/Denver