wake-up-neo.net

Verwenden von Docker-Compose zum Festlegen von Container-Zeitzonen

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?

14
noname
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.

17
Alkaline

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"
  • ro - bedeutet, dass der Container nur aus/etc/localtime des Host-Rechners lesen kann.
2
Taras Vaskiv

Dies ist eine einfache Lösung:

environment:
  - TZ=America/Denver
1
MxWild