web-dev-qa-db-de.com

Docker-Zeitzone in Ubuntu 16.04 Image

Ich habe einen Docker-Container mit dem Ubuntu 16.04-Image erstellt. 

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

nach dem Erstellen des Containers habe ich das Datum im Container überprüft:

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

Aber ich brauche es, um die Zeitzone Asia/Kolkata zu verwenden. Also habe ich versucht, die /etc/timezone-Datei zu ändern, dann docker stop und docker start den Container, aber es funktioniert nicht. Es zeigt immer noch die gleiche Zeit.  

Wie kann ich die Zeitzone im Docker-Container nach dem Erstellen ändern?

13
Rajkumar .E

Das Aktualisieren von /etc/timezone ist der übliche Weg, aber es gibt einen Fehler in Xenial , was bedeutet, dass dies nicht funktioniert.

Stattdessen müssen Sie einen Link von der gewünschten Zeitzone zu etc/localtime erstellen:

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

In Ubuntu 16.04 fehlte mir Tzdata, also musste ich es installieren. Arbeitslösung war

    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

Versuchen:

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

Sie müssen rm /etc/localtime wegen des Ubuntu Bug tun.

15
Mitar

Wie hier gesagt ist das Geheimnis, dass dpkg-reconfigure tzdata einfach /etc/localtime als Kopie, Hardlink oder Symlink (ein Symlink wird bevorzugt) zu einer Datei in /usr/share/zoneinfo erstellt. So ist es möglich, dies vollständig von Ihrem Dockerfile aus zu erledigen. Erwägen:

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

Und als Bonus wird TZ auch im Container korrekt gesetzt.

Dies ist auch Distributions-agnostisch und funktioniert daher mit nahezu allem Linux. 

5
Anthony O.

Gelöst: 

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

Wenn Sie Docker-Compose verwenden, fügen Sie Ihrer docker-compose.yml-Datei einfach eine Zeile hinzu.

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

Mein Problem wurde mit dieser sehr einfachen Lösung gelöst ( https://serverfault.com/a/826222 ): Fügen Sie in der Umgebungsvariablen eine Zeitzone hinzu.

Der Befehl lautet docker run -e TZ=Europe/Amsterdam ...

Oder mit Docker-Compose wie ich: 

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

In meinem Fall sind keine tzdata mehr erforderlich, oder die Datenträgerfreigabe mit/etc/timezone &/etc/localtime.
Ich hoffe es hilft !

0
Jacques Cornat

Ich habe diesen Ansatz gewählt:

  1. Kopieren Sie die Datei/etc/localtime irgendwo.

  2. Öffne sie und finde diese Nummer (gelb markiert)  enter image description here

  3. -3 entspricht der Moskauer Zeit. Für Berlin setzen Sie -1. Wenn Sie einen positiven Wert benötigen, stellen Sie UTC2 ein

  4. Kopieren Sie/etc/timezone entsprechend Ihrer Zeitzone.

  5. Verknüpfen Sie sie mit Ihrem Container

Ergebnis: 

 enter image description here

0
Tebe