Reputation: 1560
I have created a Docker container using the Ubuntu 16.04 image.
docker run -it -d --name containername -v /var/www/public --privileged ubuntu
after creating the container, I checked the date inside the container:
$ date
Tue Oct 25 08:10:34 UTC 2016
But, I need it to use the Asia/Kolkata timezone. So I tried changing the /etc/timezone
file, then docker stop
and docker start
the container, but it doesn't work. It still shows the same time.
How can I change the time zone in the Docker container after creating it?
Upvotes: 29
Views: 50692
Reputation: 2841
Dockerfile:
RUN apt-get update && \
apt-get install -yq tzdata && \
ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata
Reference: https://dev.to/0xbf/set-timezone-in-your-docker-image-d22
Note: Need to run it as root
user
Upvotes: 0
Reputation: 86
Simply map the volume while running docker container
-v /etc/timezone:/etc/timezone:ro
Upvotes: 1
Reputation: 28399
I am also experiencing this issue for a Ubuntu 18.04 docker container. Since tzdata
package is not installed. There is no /usr/share/zoneinfo
dir inside the docker. We need to first install tzdata
and use dpkg-reconfigure
to set the timezone. The following docker command works for me:
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y --no-install-recommends tzdata \
&& rm -rf /var/lib/apt/lists/*
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& dpkg-reconfigure --frontend noninteractive tzdata
Upvotes: 0
Reputation: 1642
My issue has been solved with this very simple solution (https://serverfault.com/a/826222) : Add timezone in environment variable.
The command is docker run -e TZ=Europe/Amsterdam ...
Or, using docker-compose, like I do :
version: '3'
services:
web:
build: ./app
ports:
- ...
volumes:
- ...
environment:
- TZ=Europe/Paris
In my case, no more tzdata needed, or volume share with /etc/timezone & /etc/localtime.
Hope it helps !
Upvotes: 5
Reputation: 7030
Try:
echo "Asia/Kolkata" > /etc/timezone
rm -f /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
You have to do rm /etc/localtime
because of the Ubuntu bug.
Upvotes: 24
Reputation: 3214
I took this approach:
Copy file /etc/localtime somewhere.
-3 corresponds to Moscow time. For Berlin set -1 . If you need positive value, set UTC2
Copy and modify /etc/timezone according to your time zone.
Result:
Upvotes: 2
Reputation: 3807
If you use docker-compose, just add one line to your docker-compose.yml
file.
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
Upvotes: 2
Reputation: 24397
As said here, the secret is that dpkg-reconfigure tzdata
simply creates /etc/localtime
as a copy, hardlink or symlink (a symlink is preferred) to a file in /usr/share/zoneinfo
. So it is possible to do this entirely from your Dockerfile. Consider:
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
And as a bonus, TZ will be set correctly in the container as well.
This is also distribution-agnostic, so it works with pretty much anything Linux.
Upvotes: 13
Reputation: 2809
SOLVED:
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
Upvotes: 1
Reputation: 1449
In ubuntu 16.04 i was missing tzdata so i had to install it. Working solution was
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
Upvotes: 31
Reputation: 19174
Updating /etc/timezone
is the usual way, but there's a bug in Xenial which means that doesn't work.
Instead you need to create a link from the desired timezone to etc/localtime
:
FROM ubuntu:xenial
RUN ln -fs /usr/share/zoneinfo/US/Pacific-New /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
Upvotes: 38