Oskar Okuno's Blog

Caddy in Docker with Local Time


When you want to log in your time zone

'Flying whale over container ship'

Caddy does not ship tzdata

Apparently Caddy does not read the TZ enviornment variable. See: https://caddy.community/t/set-timezone-for-caddy-2-official-docker-image/8622

In order to get logs in local time you need to build your own image. I started building my own Dockerfile in the blog post: Caddy in Docker with common_log. This is what we need to add in order for TZ env var to work:

RUN apk add --no-cache tzdata

Which makes the full Dockerfile:


FROM caddy:${VERSION}-builder AS builder

RUN xcaddy build \
  --with github.com/caddyserver/transform-encoder


RUN apk add --no-cache tzdata # <-- ADD THIS

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

Forking and modifying transform-encoder

Section spoiler: This was a dead end :)

I forked the transform-encoder repo and hardcoded TimeLocal = True. I think it was a fun exercise to write some Go which I don't do so often. I could successfully make the change and then tried to build a new caddy image. However, I ran into an error:

module declares its path as: github.com/caddyserver/transform-encoder
        but was required as: github.com/MrOggy85/transform-encoder

In order to replace the module with your fork you need to write your Dockerfile using = like this:

RUN xcaddy build \
  --with github.com/caddyserver/transform-encoder=github.com/MrOggy85/transform-encoder@master

I was finally able to build a new caddy image, ran it, but no change... Back to Whoogle and I finally found out what I statated in the beginning of this post, that you just need to add/install tzdata.


Here is the image if you want to use it right away:

docker pull mroggy85/caddy:2.6.2

See my Docker Hub Page: https://hub.docker.com/r/mroggy85/caddy