A lot of selfhosted containers instructions contain volume mounts like:
docker run ...
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
...
but all the times I tried to skip those mounts everything seemed to work perfectly.
Are those mounts only necessary in specific cases?
PS:
Bonus question: other containers instructions say to define the TZ
variable. Is that only needed when one wants a container to use a different timezone than the host?
Most containers default to UTC, and depending what you’re running, that may be fine.
I only mount
/etc/timezone
//etc/localtime
if I’m running a container where it needs to be on the same timezone as the host (DB containers, anything where I want the logs in local time, etc). Not all containers use theTZ
env var, so bind mounting the timezone files from the host is a guaranteed way to sync them.For a lot of applications the correct time may not matter but for something like homeassstant or syncthing you want your container time to be correct on a restart
It’s so the container has the correct local time. It doesn’t matter unless you’re trying to schedule things in the container and don’t want to calculate the offset every time you do.
Without it, the program just fallback to UTC.
/etc/localtime
and$TZ
are two ways to specify timezone for programs. The program look up the later first, if it’s empty and then use/etc/localtime
. In theory,$TZ
has better performance because of the glibc will not look up the last modified time of/etc/localtime
when every calling of localtime lookup.