Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

Docker Tip #98: Nested Variable Interpolation with Docker Compose v2

blog/cards/docker-tips-and-tricks.jpg

This can be handy if you want one of your environment variables to default to the value of another variable which has its own default.

Prefer video? Here’s a recorded version of this tip on YouTube which covers this topic.

I remember wanting to do this way back with Docker Compose v1 but it wasn’t supported. Nowadays if you’re running a recent version of Docker Compose v2 it works in a similar way as your shell.

For example, let’s say you have port forwarding set up for a web service:

    ports:
      - "${DOCKER_WEB_PORT_FORWARD:-127.0.0.1:8000}:${PORT:-8000}"

You can use nested variable interpolation for the forwarded port like this:

    ports:
      - "${DOCKER_WEB_PORT_FORWARD:-127.0.0.1:${PORT:-8000}}:${PORT:-8000}"

If PORT is optional you still can’t escape needing to update the 8000 default in 2 spots but the above approach does let you update a single PORT environment variable definition in your .env if you want to use a different port.

With that said, I wouldn’t do that in the above case since I like having my container’s port decoupled from the forwarded port but you may want to use nested interpolation for something else. This brings an awareness to the feature.

Free Intro to Docker Email Course

Over 5 days you'll get 1 email per day that includes video and text from the premium Dive Into Docker course. By the end of the 5 days you'll have hands on experience using Docker to serve a website.



Comments