web-dev-qa-db-fra.com

Utilisation de docker-compose pour définir les fuseaux horaires des conteneurs

J'ai un fichier docker-compose exécutant quelques fichiers Docker pour créer mes conteneurs. Je ne souhaite pas modifier mes fichiers Docker pour définir des fuseaux horaires, car ils peuvent être modifiés à tout moment par les membres de mon équipe. J'ai un fichier docker-compose.override.yml pour modifier l'environnement local. Cependant, l'un de mes conteneurs (basé sur Selenium) ne semble pas tirer sur le fuseau horaire de l'hôte, ce qui me pose problème. Sur cette base, je souhaite appliquer des fuseaux horaires sur tous mes conteneurs. Dans mes Dockerfiles en ce moment je fais

ENV TZ=America/Denver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Et tout fonctionne bien. Comment répliquer la même commande dans la syntaxe docker-compose?

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: La question ne l’a pas demandé, mais je viens d’ajouter exec my-main-application pour montrer comment le processus principal serait spécifié. exec est important ici pour s'assurer que my-main-application reçoit Ctrl-C (SIGINT/SIGKILL).

17
Alkaline

La solution la plus simple serait de partager le volume dans docker-compose.yml comme ceci

ipchanger:
  image: codertarasvaskiv/ipchanger:raspberry
  volumes:
    - "/etc/localtime:/etc/localtime:ro"
  • ro - signifie que le conteneur ne peut lire que depuis/etc/localtime de Host-machine.
2
Taras Vaskiv

C'est une solution simple:

environment:
  - TZ=America/Denver
1
MxWild