Can a variable be used in docker FROM?

You could simply generate your Dockerfile from a template. Put something like this in a Makefile:

MYTAG=latest

.PHONY: Dockerfile
Dockerfile: Dockerfile.in
    sed 's/MYTAG/$(MYTAG)/' $< > $@ || rm -f $@

Then you can run:

make MYTAG=8; docker build -t my-app-8 .

This would only make sense if you are frequently building images that require a different tag in the FROM line.


Quoting this link :

This is now possible if anyone comes here looking for answers: https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact

FROM instructions support variables that are declared by any ARG instructions that occur before the first FROM.

ARG  CODE_VERSION=latest
FROM base:${CODE_VERSION}
CMD  /code/run-app

FROM extras:${CODE_VERSION}
CMD  /code/run-extras

For at least this docker version this is feasible

docker --version
docker version 18.09.8, build bfed4f5

It requires a preset variable in Dockerfile e.g.

ARG TAG=latest
FROM traefik:${TAG}

Then you can override this preset with the following

docker build --build-arg "TAG=2.2.8" -t my-app:$TAG

The version number will not show up during build. if you want to test if it works, reference a non-existing version - it will fail with: manifest my-app:version not found.

Tags:

Docker