2016-08-26 2 views
7

Ich habe eine docker-compose-Datei mit ein paar Dockerfiles, um meine Container zu erstellen. Ich möchte meine Dockerfiles nicht bearbeiten, um Zeitzonen festzulegen, da sie jederzeit von Mitgliedern meines Teams geändert werden können, und ich habe eine docker-compose.override.yml-Datei, um lokale Umgebungsänderungen vorzunehmen. Einer meiner Container (ein Selen-basierter) scheint jedoch die Host-Zeitzone nicht zu ziehen, und das bereitet mir Probleme. Darauf aufbauend möchte ich Zeitzonen auf allen meinen Containern erzwingen. In meinem Dockerfiles mache ich jetztVerwenden von docker-compose zum Festlegen von Containern timezones

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?

+3

https://github.com/dnvriend/docker-timezone-test/blob/master/docker-compose.yml –

Antwort

7
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 ist nicht danach gefragt hat, aber ich habe gerade exec my-main-application zu zeigen, hinzugefügt, wie der Hauptprozess angegeben werden würde. exec ist hier wichtig, um sicherzustellen, dass my-main-application Ctrl-C (SIGINT/SIGKILL) empfängt.

+0

Beachten Sie, dass der "Befehl" von docker-compose den Standardbefehl, falls vorhanden, überschreibt. Referenz: https://docs.docker.com/compose/compose-file/#/command –

+1

@ Claudiod'Angelis Das ist richtig, und das ist auch das gewünschte Verhalten hier. Bei der schnellen Überprüfung meines Codes wurde mir klar, dass ich angeben muss, wie der Hauptprozess für den Container gestartet wird. Jetzt hinzufügen. – Alkaline

Verwandte Themen