263 votes

Heure et fuseau horaire du conteneur Docker (ne reflètera pas les changements)

Où les conteneurs Docker obtiennent-ils leurs informations temporelles ? J'ai créé quelques conteneurs à partir de l'image de base ubuntu:trusty, et lorsque je l'exécute et demande 'date', j'obtiens l'heure UTC.

Pendant un certain temps, j'ai contourné ce problème en faisant ce qui suit dans mon Dockerfile :

RUN sudo echo "America/Los_Angeles" > /etc/timezone

Cependant, pour une raison quelconque, cela a cessé de fonctionner. En cherchant en ligne, j'ai vu la proposition ci-dessous :

docker run -v /etc/timezone:/etc/timezone [image-name]

Ces deux méthodes permettent cependant de définir correctement le fuseau horaire !

$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015

Quelqu'un sait ce qui se passe ?

5 votes

Si vous utilisez Alpine vous devez installer tzdata d'abord, voir ici github.com/gliderlabs/docker-alpine/issues/136

2 votes

POUR VOTRE INFORMATION Je souhaite définir le fuseau horaire du conteneur au moment de l'exécution de docker et non au moment de la construction de docker/dockerfile. En utilisant -v /etc/localtime:/etc/localtime:ro (CentOS) fonctionne en quelque sorte. Dans le conteneur, la ligne de commande date renvoie la date dans le format de fuseau horaire attendu. MAIS Jenkins, qui fonctionne dans le conteneur, pense que le fuseau horaire est UTC. Pourquoi ? /etc/localtime est un lien symbolique vers ../usr/share/zoneinfo/UTC dans le conteneur construit. Le contenu du fichier UTC dans le conteneur est maintenant le nouveau fuseau horaire. Mais jenkins (et peut-être d'autres logiciels basés sur Java) utilise le nom du lien symbolique qui est toujours "UTC". Je cherche une solution

1 votes

Besoin de 2 choses, 1. Lorsque le conteneur est créé, utiliser un init script pour définir le lien symbolique /etc/localtime et /etc/timezone et 2. pour jenkins le fuseau horaire est pris à partir de deux options java, ces options doivent être passées au init script qui démarre le processus jenkins. par exemple " -Dorg.apache.commons.jelly.tags.fmt.timeZone=America/New_York -Duser.timezone=America/New_York ". Toutes mes excuses, ceci est spécifique à Jenkins mais j'espère que cela sera utile pour d'autres utilisateurs de Jenkins.

3voto

Mugen Points 151

Une manière plus générique de définir le fuseau horaire en docker run arguments :

-e TZ=`ls -la /etc/localtime | cut -d/ -f8-9`

Ou pour la réutilisation :

function GET_TZ () {
    ls -la /etc/localtime | cut -d/ -f8-9
}

...
-e TZ=`GET_TZ`

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X