Où les conteneurs Docker obtiennent-ils leurs informations de temps? J'ai créé des conteneurs à partir de la base ubuntu: trusty image, et lorsque je l'exécute et demande la «date», j'obtiens l'heure UTC.
Pendant un certain temps, j'ai contourné cela en procédant comme suit dans mon fichier Docker:
RUN sudo echo "America/Los_Angeles" > /etc/timezone
Cependant, pour une raison quelconque qui a cessé de fonctionner. En recherchant en ligne, j'ai vu ce qui suit:
docker run -v /etc/timezone:/etc/timezone [image-name]
Cependant, ces deux méthodes définissent correctement le fuseau horaire!
$ cat /etc/timezone
America/Los_Angeles
$ date
Tue Apr 14 23:46:51 UTC 2015
Quelqu'un sait ce qui donne?
Alpine
, vous devez d'tzdata
abord l' installer , voir ici github.com/gliderlabs/docker-alpine/issues/136-v /etc/localtime:/etc/localtime:ro
(CentOS) sorte de travaux. La date dans la ligne de commande du conteneur à l'intérieur renvoie la date dans le format de fuseau horaire prévu. MAIS Jenkins s'exécutant dans un conteneur pense que le fuseau horaire est au format UTC. Pourquoi? / etc / localtime est un lien symbolique vers ../usr/share/zoneinfo/UTC dans un 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) utilisent le nom du lien symbolique qui est toujours "UTC". À la recherche d'une solution. . .Réponses:
Le secret ici est que
dpkg-reconfigure tzdata
crée simplement/etc/localtime
comme une copie, lien dur ou lien symbolique (un lien symbolique est préférable) à un fichier dans/usr/share/zoneinfo
. Il est donc possible de le faire entièrement à partir de votre fichier Docker. Considérer:Et en prime, TZ sera également correctement défini dans le conteneur.
Ceci est également indépendant de la distribution, donc cela fonctionne avec à peu près tout Linux.
Remarque: si vous utilisez une image alpine, vous devez installer la
tzdata
première. (voir ce numéro ici )Ressemble à ça:
la source
tzdata
installer un paquet pour que cela fonctionne.TZ
suffisait de définir la variable. Je n'ai pas eu à configurer les liens symboliques ou quoi que ce soit d'autre.Généralement, il suffit de définir une variable d'environnement dans le conteneur de menu fixe, comme suit:
Bien sûr, cela fonctionnerait aussi avec
docker-compose
.la source
ubuntu:16.04
, ne contienne pas letzdata
package à ajouter dans Dockerfile.Monter
/etc/localtime
dans l'image, donc il est synchronisé avechost -v
est le plus populaire.Mais voir le numéro 12084 :
la source
RUN echo "Europe/London" > /etc/timezone
Vous pouvez ajouter vos fichiers locaux (/ etc / timezone et / etc / localtime) en tant que volume dans votre conteneur Docker.
Mettez à jour votre
docker-compose.yml
avec les lignes suivantes.Maintenant, l'heure du conteneur est la même que sur votre hôte
la source
echo "Europe/Paris" > /etc/timezone
avant de redémarrer le conteneur.Dans ubuntu 16.04 image il y a un bug. La solution était
la source
si vous utilisez une image fixe en fonction de
ubuntu
:la source
Merci à VonC pour les informations et le lien vers le problème. Cela ressemble à un gâchis si compliqué, alors j'ai fait quelques essais sur ma propre idée de la façon de résoudre ce problème et cela semble bien fonctionner.
(suivez les instructions pour choisir mon fuseau horaire)
Ensuite, j'ai mis à jour mes fichiers Dockerfiles pour refléter ceci:
Il doit y avoir quelque chose qui ne va pas avec cela car il semble trop facile d’être négligé ... Ou est-ce acceptable?
la source
exit
le conteneur. Ceci est sur Debian.J'ajoute mes deux sous ici, car j'ai essayé plusieurs de ces solutions, mais aucune n'a fonctionné avec des images alpines.
Cependant, cela a fait l'affaire:
[ Source ]
la source
Une manière plus générique de définir le fuseau horaire en
docker run
arguments:Ou pour la réutilisation:
la source