A containerized app can revert to UTC after an update when the new image drops timezone data, ignores TZ, or no longer uses the host timezone mount.
The host clock can remain correct while the application formats dates in UTC because containers normally share the host kernel clock but carry their own timezone files, environment, and language runtime data. An image update may switch base distributions, remove tzdata, change the application user, replace the entrypoint, or stop honoring a vendor-specific TZ variable. Compare the old and new image before changing the host timezone.
Separate System Clock Time From Timezone Formatting
Record UTC time, local formatted time, timezone name, numeric offset, and the application’s own displayed time inside the old and new containers.
The GNU C Library explains that the TZ variable controls local-time conversion, while the underlying system clock remains an absolute time source.
If epoch time matches but the formatted zone changes, the problem is timezone configuration rather than clock drift or NTP.
Check Whether the New Image Still Contains tzdata
Compare installed packages, /usr/share/zoneinfo, /etc/localtime, and /etc/timezone between the previous and current image tags.
Debian’s tzdata package supplies timezone definitions used by applications to convert UTC into regional local time.
A minimal replacement image may intentionally omit this package. Install it in a derived image or use the application’s supported timezone mechanism instead of modifying a running container by hand.
Verify How the Base Distribution Applies TZ
Identify whether the image is Debian, Ubuntu, Alpine, distroless, or another base. Do not assume that setting TZ has identical effects in every image.
Alpine Linux documents timezone setup through tzdata and zoneinfo.
If the update changed the base image, repeat the timezone setup using that distribution’s supported method. Copying one file from the old container can leave daylight-saving rules stale.
Inspect the Host localtime Bind Mount
Compare the running container’s mounts before and after recreation. Check whether /etc/localtime or a zoneinfo file is still mounted read-only.
Docker bind mounts map an exact host file or directory into the container. The official bind-mount guidance shows why a removed Compose mount or changed source path makes the new container fall back to its image default.
Do not mount the host’s entire /etc directory. Use the narrow supported file or explicit timezone configuration required by the application.
Check the Application Runtime’s Own Zone Database
Identify whether the application uses the operating-system zoneinfo database or bundles timezone data inside Python, Java, PHP, Node.js, or another runtime.
Python’s zoneinfo module searches system data or a tzdata package.
An application can therefore display UTC even when shell commands show the correct zone. Compare application runtime behavior separately from the container shell.
Verify Compose Environment Precedence After Recreation
Inspect the final environment of the recreated container and compare it with Compose interpolation, environment, env_file, and image defaults.
Red Hat’s container documentation notes that runtime configuration can override image environment, so an updated image and an old deployment file can produce a different final value than expected.
Read the actual container environment rather than only the Compose file. A stale stack UI or alternate env file may have recreated the service without the intended timezone variable.
Pin the Configuration and Test Across Another Update
Choose one supported timezone method, pin it in version-controlled deployment configuration, recreate the container, and verify winter and daylight-saving dates where applicable.
The ZimaSpace article on container job time and environment provides the adjacent diagnostic boundary for schedules that shift when container time settings change.
The issue is resolved when the application, shell, logs, and scheduled jobs use the intended zone after restart and another controlled image recreation.
Frequently Asked Questions
Do containers have their own hardware clock?
No. They normally share the host kernel clock, but they can format that time using different timezone data and environment settings.
Is setting TZ always enough?
No. The image and application must support the variable and have access to timezone rules. Some runtimes use a separate bundled database.
Should I change the NAS host timezone to fix one container?
No. First correct the container or application configuration; changing the host can affect logs, schedules, and every other service.
Support & Tips
More to Read

Why Does a Docker Volume Restore Recreate File Contents but Drop Extended Attributes?
A volume-restore diagnosis covering xattr inventory, tar and Rsync options, namespaces, destination support, privileges, labels, app metadata, and tests.

Why Does a Running Container Keep Its Old Memory Limit After the Compose File Changes?
A memory-limit diagnosis covering live cgroups, restart versus recreation, Compose fields, hard and soft limits, parent scopes, swap, and runtime heaps.

Why Does Restarting a Reverse Proxy Invalidate Every Session for One Self-Hosted App?
A session-loss diagnosis covering restart scope, cookie ownership, secret rotation, cache-backed sessions, sticky routing, auth gateways, and recovery.

