web-dev-qa-db-fra.com

Docker Timezone dans Ubuntu 16.04 Image

J'ai créé un conteneur Docker à l'aide de l'image Ubuntu 16.04. 

docker run -it -d --name containername -v /var/www/public --privileged ubuntu

après avoir créé le conteneur, j'ai vérifié la date à l'intérieur du conteneur:

$ date
Tue Oct 25 08:10:34 UTC 2016

Mais, j'en ai besoin pour utiliser le Asia/Kolkata timezone. J'ai donc essayé de modifier le fichier /etc/timezone, puis docker stop et docker start le conteneur, mais cela ne fonctionne pas. Il montre toujours le même temps.  

Comment modifier le fuseau horaire dans le conteneur Docker après l'avoir créé?

13
Rajkumar .E

La mise à jour de /etc/timezone est la méthode habituelle, mais il existe un bogue dans Xenial qui signifie que cela ne fonctionne pas.

Au lieu de cela, vous devez créer un lien depuis le fuseau horaire souhaité vers etc/localtime:

FROM ubuntu:xenial     
RUN ln -fs /usr/share/zoneinfo/US/Pacific-New /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
23
Elton Stoneman

Dans Ubuntu 16.04, il me manquait tzdata alors je devais l'installer. La solution de travail était

    ENV TZ 'Europe/Tallinn'
    RUN echo $TZ > /etc/timezone && \
    apt-get update && apt-get install -y tzdata && \
    rm /etc/localtime && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata && \
    apt-get clean
20
qwerty

Essayer:

echo "Asia/Kolkata" > /etc/timezone
rm -f /etc/localtime
dpkg-reconfigure -f noninteractive tzdata

Vous devez faire rm /etc/localtime à cause du bug Ubuntu .

15
Mitar

Comme dit ici , le secret est que dpkg-reconfigure tzdata crée simplement /etc/localtime en tant que copie, lien physique ou lien symbolique (un lien symbolique est préférable) à un fichier en /usr/share/zoneinfo. Il est donc possible de le faire entièrement à partir de votre fichier Docker. Considérer:

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

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 n'importe quoi sous Linux. 

5
Anthony O.

Résolu: 

FROM ubuntu:16.04

RUN apt-get update && \
    apt-get install -y software-properties-common apt-utils locales tzdata

RUN echo "tzdata tzdata/Areas select Europe" > timezone.txt
RUN echo "tzdata tzdata/Zones/Europe select Rome" >> timezone.txt
RUN debconf-set-selections timezone.txt
RUN rm /etc/timezone
RUN rm /etc/localtime
RUN dpkg-reconfigure -f noninteractive tzdata
1
Flavio Troia

Si vous utilisez docker-compos, ajoutez simplement une ligne à votre fichier docker-compose.yml.

version: '3'

services:
  ubuntu-local:
    image: ubuntu:16.04
    restart: on-failure
    command: python3 run_my_code.py
    working_dir: /code
    volumes:
      - ./code:/code
      - /etc/localtime:/etc/localtime:ro   # <--add this line to set timezone
    environment:
      - PYTHONUNBUFFERED=1
1
Belter

Mon problème a été résolu avec cette solution très simple ( https://serverfault.com/a/826222 ): Ajouter un fuseau horaire dans la variable d'environnement.

La commande est docker run -e TZ=Europe/Amsterdam ...

Ou, en utilisant docker-compose, comme je le fais: 

version: '3'
services:
    web:
        build: ./app
        ports:
            - ...
        volumes:
            - ...
        environment:
            - TZ=Europe/Paris

Dans mon cas, plus besoin de tzdata, ni de partage de volume avec/etc/timezone &/etc/localtime.
J'espère que ça aide !

0
Jacques Cornat

J'ai pris cette approche:

  1. Copiez le fichier/etc/localtime quelque part.

  2. Ouvrez-le et trouvez le numéro (surligné en jaune)  enter image description here

  3. -3 correspond à l'heure de Moscou. Pour Berlin set -1. Si vous avez besoin d'une valeur positive, définissez UTC2

  4. Copiez et modifiez/etc/timezone en fonction de votre fuseau horaire.

  5. Les lier à votre conteneur

Résultat: 

 enter image description here

0
Tebe