Часовой пояс докера в Ubuntu 16.04 Image

Я создал контейнер Docker, используя образ Ubuntu 16.04.

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

после создания контейнера я проверил дату внутри контейнера:

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

но, мне нужно использовать Азия/Калькутта часовой пояс. Поэтому я попытался изменить , потом docker stop и docker start контейнер, но он не работает. Это все еще показывает то же время.

как я могу изменить часовой пояс в контейнере Docker после создаешь его?

7 ответов


обновление /etc/timezone это обычный способ, но есть ошибка в Xenial что означает, что это не работает.

вместо этого вам нужно создать ссылку из желаемого часового пояса на etc/localtime:

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

попробуй:

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

вам нужно rm /etc/localtime из-за Ubuntu ошибка.


в ubuntu 16.04 мне не хватало tzdata, поэтому мне пришлось его установить. Рабочее решение было

    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

As сказал, секрет в том, что dpkg-reconfigure tzdata просто создает /etc/localtime как копия, жесткая ссылка или символическая ссылка (предпочтительнее символическая ссылка) на файл в /usr/share/zoneinfo. Таким образом, это можно сделать полностью из вашего Dockerfile. Подумайте:

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

и в качестве бонуса TZ также будет правильно установлен в контейнере.

Это также дистрибутив-агностик, поэтому он работает практически с любым Linux.


решила:

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

Если вы используете docker-compose, просто добавьте одну строку в свой .

версия: '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. скопируйте файл / etc / localtime где-нибудь.

  2. откройте его и найдите это число (выделено желтым цветом) enter image description here

  3. -3 соответствует московскому времени. В Берлине поставили -1 . Если вам нужно положительное значение, установите UTC2

  4. скопируйте и измените /etc/часовой пояс в соответствии с вашим часовым поясом.

  5. связать их с контейнер

результат:

enter image description here