skip to Main Content

For a project, I need a container whose timezone is synced to host machine’s timezone. My container should have the ability to sync to timezone changes on host machine at runtime. For this purpose I mounted /etc/localtime symlink and /etc/timezone file as per googling the topic.

My host machine is Ubuntu 20.04.4 LTS.

Below is my docker run command:

docker run 
 -v /etc/localtime:/etc/localtime:ro 
 -v /etc/timezone:/etc/timezone:ro 
 --name openjdk-jdk11-slim 
 -it --rm 
 openjdk:11-jre-slim

After container starts, if I change the timezone of host machine via;

sudo timedatectl set-timezone Africa/Bissau

I see that date command inside container (container’s interactive terminal) still outputs the timezone state of when container created. After changing timezone on host, if I recreate container, then only I can get the new timezone in container.

Is there an elegant way to fix this?

PS: My Docker version is as follows;

testuser@test-ubuntu:~$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu5~20.04.2

2

Answers


  1. Did you try to set an environment variable in the Docker container? As an example,

    docker run -e TZ=Europe/Amsterdam debian:jessie date
    
    Login or Signup to reply.
  2. Populate the TZ via cat so it’s automatic:

    if [ -f "/etc/timezone" ]; then
        temp_tz="$(cat /etc/timezone)"
        if [ ! -z "$temp_tz" ]; then
                export TZ=$temp_tz
        fi
    fi
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search