Часовой пояс докера в 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
Я взял этот подход:
скопируйте файл / etc / localtime где-нибудь.
-3 соответствует московскому времени. В Берлине поставили -1 . Если вам нужно положительное значение, установите UTC2
скопируйте и измените /etc/часовой пояс в соответствии с вашим часовым поясом.
- связать их с контейнер
результат: