Skip to content

Instantly share code, notes, and snippets.

@ag4ve
Last active January 25, 2024 00:33
Show Gist options
  • Save ag4ve/a06a7ff716e2d3e07c408e5f6b70f98f to your computer and use it in GitHub Desktop.
Save ag4ve/a06a7ff716e2d3e07c408e5f6b70f98f to your computer and use it in GitHub Desktop.
Docker compose environment/build-args table
---
# cli: export | build-arg
# compose: environment | args | args override env
# docker: ENV | ARG | ENV=ARG
#
# environment:
# ENV_ENV_ENV, ENV_ENV_ARG, ENV_ENV_ETOA
# ARG_ENV_ENV, ARG_ENV_ARG, ARG_ENV_ETOA
# build args:
# ENV_ARG_ENV, ENV_ARG_ARG, ENV_ARG_ETOA
# ARG_ARG_ENV, ARG_ARG_ARG, ARG_ARG_ETOA
# both: with ETOA too
# ENV_AOE_ENV, ENV_AOE_ARG, ENV_AOE_ETOA
# ARG_AOE_ENV, ARG_AOE_ARG, ARG_AOE_ETOA
#
version: "3"
services:
test-arg:
image: test-arg
environment:
ENV_ENV_ENV: 1
ENV_ENV_ARG: 1
ENV_ENV_ETOA: 1
ARG_ENV_ENV: 1
ARG_ENV_ARG: 1
ARG_ENV_ETOA: 1
ENV_AOE_ENV: 1
ENV_AOE_ARG: 1
ENV_AOE_ETOA: 1
ARG_AOE_ENV: 1
ARG_AOE_ARG: 1
ARG_AOE_ETOA: 1
build:
context: .
args:
ENV_ARG_ENV: 2
ENV_ARG_ARG: 2
ENV_ARG_ETOA: 2
ARG_ARG_ENV: 2
ARG_ARG_ARG: 2
ARG_ARG_ETOA: 2
ENV_AOE_ENV: 2
ENV_AOE_ARG: 2
ENV_AOE_ETOA: 2
ARG_AOE_ENV: 2
ARG_AOE_ARG: 2
ARG_AOE_ETOA: 2
dockerfile_inline: |
FROM ubuntu:latest
LABEL name=testing-arg
ARG ENV_ENV_ARG
ARG ARG_ENV_ARG
ARG ENV_ARG_ARG
ARG ARG_ARG_ARG
ARG ENV_AOE_ARG
ARG ARG_AOE_ARG
ENV ENV_ENV_ENV 3
ENV ARG_ENV_ENV 3
ENV ENV_ARG_ENV 3
ENV ARG_ARG_ENV 3
ENV ENV_AOE_ENV 3
ENV ARG_AOE_ENV 3
ARG ENV_ENV_ETOA
ARG ARG_ENV_ETOA
ARG ENV_ARG_ETOA
ARG ARG_ARG_ETOA
ARG ENV_AOE_ETOA
ARG ARG_AOE_ETOA
ENV ENV_ENV_ETOA "$ENV_ENV_ETOA"
ENV ARG_ENV_ETOA "$ARG_ENV_ETOA"
ENV ENV_ARG_ETOA "$ENV_ARG_ETOA"
ENV ARG_ARG_ETOA "$ARG_ARG_ETOA"
ENV ENV_AOE_ETOA "$ENV_AOE_ETOA"
ENV ARG_AOE_ETOA "$ARG_AOE_ETOA"
ENV ENV_ENV_ETOA2 "$$ENV_ENV_ETOA"
ENV ARG_ENV_ETOA2 "$$ARG_ENV_ETOA"
ENV ENV_ARG_ETOA2 "$$ENV_ARG_ETOA"
ENV ARG_ARG_ETOA2 "$$ARG_ARG_ETOA"
ENV ENV_AOE_ETOA2 "$$ENV_AOE_ETOA"
ENV ARG_AOE_ETOA2 "$$ARG_AOE_ETOA"
RUN echo -ne "\n" \
">> environment: \n" \
">> ENV_ENV_ENV [$ENV_ENV_ENV] ENV_ENV_ARG [$ENV_ENV_ARG] ENV_ENV_ETOA [$ENV_ENV_ETOA] \n" \
">> ARG_ENV_ENV [$ARG_ENV_ENV] ARG_ENV_ARG [$ARG_ENV_ARG] ARG_ENV_ETOA [$ARG_ENV_ETOA] \n" \
">> build-args: \n" \
">> ENV_ARG_ENV [$ENV_ARG_ENV] ENV_ARG_ARG [$ENV_ARG_ARG] ENV_ARG_ETOA [$ENV_ARG_ETOA]\n" \
">> ARG_ARG_ENV [$ARG_ARG_ENV] ARG_ARG_ARG [$ARG_ARG_ARG] ARG_ARG_ETOA [$ARG_ARG_ETOA]\n" \
">> both: with ETOA too \n" \
">> ENV_AOE_ENV [$ENV_AOE_ENV] ENV_AOE_ARG [$ENV_AOE_ARG] ENV_AOE_ETOA [$ENV_AOE_ETOA]\n" \
">> ARG_AOE_ENV [$ARG_AOE_ENV] ARG_AOE_ARG [$ARG_AOE_ARG] ARG_AOE_ETOA [$ARG_AOE_ETOA]\n" \
">> ENV: with two dollar \n" \
">> ENV_ENV_ETOA2 [$ENV_ENV_ETOA2] ARG_ENV_ETOA2 [$ARG_ENV_ETOA2] ENV_ARG_ETOA2 [$ENV_ARG_ETOA2]\n" \
">> ARG_ARG_ETOA2 [$ARG_ARG_ETOA2] ENV_AOE_ETOA2 [$ENV_AOE_ETOA2] ARG_AOE_ETOA2 [$ARG_AOE_ETOA2]\n" \
""
RUN echo -ne "\n" \
">> environment two dollar: \n" \
">> ENV_ENV_ENV [$$ENV_ENV_ENV] ENV_ENV_ARG [$$ENV_ENV_ARG] ENV_ENV_ETOA [$$ENV_ENV_ETOA] \n" \
">> ARG_ENV_ENV [$$ARG_ENV_ENV] ARG_ENV_ARG [$$ARG_ENV_ARG] ARG_ENV_ETOA [$$ARG_ENV_ETOA] \n" \
">> build-args two dollar: \n" \
">> ENV_ARG_ENV [$$ENV_ARG_ENV] ENV_ARG_ARG [$$ENV_ARG_ARG] ENV_ARG_ETOA [$$ENV_ARG_ETOA]\n" \
">> ARG_ARG_ENV [$$ARG_ARG_ENV] ARG_ARG_ARG [$$ARG_ARG_ARG] ARG_ARG_ETOA [$$ARG_ARG_ETOA]\n" \
">> both two dollar: with ETOA too \n" \
">> ENV_AOE_ENV [$$ENV_AOE_ENV] ENV_AOE_ARG [$$ENV_AOE_ARG] ENV_AOE_ETOA [$$ENV_AOE_ETOA]\n" \
">> ARG_AOE_ENV [$$ARG_AOE_ENV] ARG_AOE_ARG [$$ARG_AOE_ARG] ARG_AOE_ETOA [$$ARG_AOE_ETOA]\n" \
">> ENV with two dollar two dollar: \n" \
">> ENV_ENV_ETOA2 [$$ENV_ENV_ETOA2] ARG_ENV_ETOA2 [$$ARG_ENV_ETOA2] ENV_ARG_ETOA2 [$$ENV_ARG_ETOA2]\n" \
">> ARG_ARG_ETOA2 [$$ARG_ARG_ETOA2] ENV_AOE_ETOA2 [$$ENV_AOE_ETOA2] ARG_AOE_ETOA2 [$$ARG_AOE_ETOA2]\n" \
""
tty: true
stdin_open: true
srwilson-u2204% ./t.sh [73/47262]
>> CLI no parameters
environment:
ENV_ENV_ENV [] ENV_ENV_ARG [] ENV_ENV_ETOA []
ARG_ENV_ENV [] ARG_ENV_ARG [] ARG_ENV_ETOA []
build-args:
ENV_ARG_ENV [] ENV_ARG_ARG [] ENV_ARG_ETOA []
ARG_ARG_ENV [] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [] ENV_AOE_ARG [] ENV_AOE_ETOA []
ARG_AOE_ENV [] ARG_AOE_ARG [] ARG_AOE_ETOA []
ENV: with two dollar
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
environment two dollar:
ENV_ENV_ENV [3] ENV_ENV_ARG [] ENV_ENV_ETOA []
ARG_ENV_ENV [3] ARG_ENV_ARG [] ARG_ENV_ETOA []
build-args two dollar:
ENV_ARG_ENV [3] ENV_ARG_ARG [2] ENV_ARG_ETOA []
ARG_ARG_ENV [3] ARG_ARG_ARG [2] ARG_ARG_ETOA []
both two dollar: with ETOA too
ENV_AOE_ENV [3] ENV_AOE_ARG [2] ENV_AOE_ETOA []
ARG_AOE_ENV [3] ARG_AOE_ARG [2] ARG_AOE_ETOA []
ENV with two dollar two dollar:
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
environment:
ENV_ENV_ENV [1] ENV_ENV_ARG [1] ENV_ENV_ETOA [1]
ARG_ENV_ENV [1] ARG_ENV_ARG [1] ARG_ENV_ETOA [1]
build-args:
ENV_ARG_ENV [3] ENV_ARG_ARG [] ENV_ARG_ETOA []
ARG_ARG_ENV [3] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [1] ENV_AOE_ARG [1] ENV_AOE_ETOA [1]
ARG_AOE_ENV [1] ARG_AOE_ARG [1] ARG_AOE_ETOA [1]
ENV: with two dollar
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
>> CLI environment variables
environment:
ENV_ENV_ENV [A] ENV_ENV_ARG [A] ENV_ENV_ETOA [A]
ARG_ENV_ENV [] ARG_ENV_ARG [] ARG_ENV_ETOA []
build-args:
ENV_ARG_ENV [A] ENV_ARG_ARG [A] ENV_ARG_ETOA [A]
ARG_ARG_ENV [] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [A] ENV_AOE_ARG [A] ENV_AOE_ETOA [A]
ARG_AOE_ENV [] ARG_AOE_ARG [] ARG_AOE_ETOA []
ENV: with two dollar
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
environment two dollar:
ENV_ENV_ENV [3] ENV_ENV_ARG [] ENV_ENV_ETOA [A]
ARG_ENV_ENV [3] ARG_ENV_ARG [] ARG_ENV_ETOA []
build-args two dollar:
ENV_ARG_ENV [3] ENV_ARG_ARG [2] ENV_ARG_ETOA [A]
ARG_ARG_ENV [3] ARG_ARG_ARG [2] ARG_ARG_ETOA []
both two dollar: with ETOA too
ENV_AOE_ENV [3] ENV_AOE_ARG [2] ENV_AOE_ETOA [A]
ARG_AOE_ENV [3] ARG_AOE_ARG [2] ARG_AOE_ETOA []
ENV with two dollar two dollar:
ENV_ENV_ETOA2 [A] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 [A]
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [A] ARG_AOE_ETOA2 []
environment:
ENV_ENV_ENV [1] ENV_ENV_ARG [1] ENV_ENV_ETOA [1]
ARG_ENV_ENV [1] ARG_ENV_ARG [1] ARG_ENV_ETOA [1]
build-args:
ENV_ARG_ENV [3] ENV_ARG_ARG [] ENV_ARG_ETOA [A]
ARG_ARG_ENV [3] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [1] ENV_AOE_ARG [1] ENV_AOE_ETOA [1]
ARG_AOE_ENV [1] ARG_AOE_ARG [1] ARG_AOE_ETOA [1]
ENV: with two dollar
ENV_ENV_ETOA2 [A] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 [A]
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [A] ARG_AOE_ETOA2 []
>> CLI build-arg
environment:
ENV_ENV_ENV [] ENV_ENV_ARG [] ENV_ENV_ETOA []
ARG_ENV_ENV [] ARG_ENV_ARG [] ARG_ENV_ETOA []
build-args:
ENV_ARG_ENV [] ENV_ARG_ARG [] ENV_ARG_ETOA []
ARG_ARG_ENV [] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [] ENV_AOE_ARG [] ENV_AOE_ETOA []
ARG_AOE_ENV [] ARG_AOE_ARG [] ARG_AOE_ETOA []
ENV: with two dollar
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
environment two dollar:
ENV_ENV_ENV [3] ENV_ENV_ARG [] ENV_ENV_ETOA []
ARG_ENV_ENV [3] ARG_ENV_ARG [B] ARG_ENV_ETOA []
build-args two dollar:
ENV_ARG_ENV [3] ENV_ARG_ARG [2] ENV_ARG_ETOA []
ARG_ARG_ENV [3] ARG_ARG_ARG [B] ARG_ARG_ETOA []
both two dollar: with ETOA too
ENV_AOE_ENV [3] ENV_AOE_ARG [2] ENV_AOE_ETOA []
ARG_AOE_ENV [3] ARG_AOE_ARG [B] ARG_AOE_ETOA []
ENV with two dollar two dollar:
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
environment:
ENV_ENV_ENV [1] ENV_ENV_ARG [1] ENV_ENV_ETOA [1]
ARG_ENV_ENV [1] ARG_ENV_ARG [1] ARG_ENV_ETOA [1]
build-args:
ENV_ARG_ENV [3] ENV_ARG_ARG [] ENV_ARG_ETOA []
ARG_ARG_ENV [3] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [1] ENV_AOE_ARG [1] ENV_AOE_ETOA [1]
ARG_AOE_ENV [1] ARG_AOE_ARG [1] ARG_AOE_ETOA [1]
ENV: with two dollar
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
>> CLI environment variables and build-arg
environment:
ENV_ENV_ENV [A] ENV_ENV_ARG [A] ENV_ENV_ETOA [A]
ARG_ENV_ENV [] ARG_ENV_ARG [] ARG_ENV_ETOA []
build-args:
ENV_ARG_ENV [A] ENV_ARG_ARG [A] ENV_ARG_ETOA [A]
ARG_ARG_ENV [] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [A] ENV_AOE_ARG [A] ENV_AOE_ETOA [A]
ARG_AOE_ENV [] ARG_AOE_ARG [] ARG_AOE_ETOA []
ENV: with two dollar
ENV_ENV_ETOA2 [] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 []
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [] ARG_AOE_ETOA2 []
environment two dollar:
ENV_ENV_ENV [3] ENV_ENV_ARG [] ENV_ENV_ETOA [A]
ARG_ENV_ENV [3] ARG_ENV_ARG [B] ARG_ENV_ETOA []
build-args two dollar:
ENV_ARG_ENV [3] ENV_ARG_ARG [2] ENV_ARG_ETOA [A]
ARG_ARG_ENV [3] ARG_ARG_ARG [B] ARG_ARG_ETOA []
both two dollar: with ETOA too
ENV_AOE_ENV [3] ENV_AOE_ARG [2] ENV_AOE_ETOA [A]
ARG_AOE_ENV [3] ARG_AOE_ARG [B] ARG_AOE_ETOA []
ENV with two dollar two dollar:
ENV_ENV_ETOA2 [A] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 [A]
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [A] ARG_AOE_ETOA2 []
environment:
ENV_ENV_ENV [1] ENV_ENV_ARG [1] ENV_ENV_ETOA [1]
ARG_ENV_ENV [1] ARG_ENV_ARG [1] ARG_ENV_ETOA [1]
build-args:
ENV_ARG_ENV [3] ENV_ARG_ARG [] ENV_ARG_ETOA [A]
ARG_ARG_ENV [3] ARG_ARG_ARG [] ARG_ARG_ETOA []
both: with ETOA too
ENV_AOE_ENV [1] ENV_AOE_ARG [1] ENV_AOE_ETOA [1]
ARG_AOE_ENV [1] ARG_AOE_ARG [1] ARG_AOE_ETOA [1]
ENV: with two dollar
ENV_ENV_ETOA2 [A] ARG_ENV_ETOA2 [] ENV_ARG_ETOA2 [A]
ARG_ARG_ETOA2 [] ENV_AOE_ETOA2 [A] ARG_AOE_ETOA2 []
#!/usr/bin/env bash
runit () {
tmpdir="$(mktemp -d)"
fifo="${tmpdir}/fifo"
docker compose run test-arg bash -c export 2>&1 \
| grep -E -- 'declare -x [A-Z]{3}_[A-Z]{3}_[A-Z]{3,5}' \
| cut -d' ' -f3 \
> "$fifo"
source "$fifo"
echo -ne "\n" \
"environment: \n" \
"ENV_ENV_ENV [$ENV_ENV_ENV] ENV_ENV_ARG [$ENV_ENV_ARG] ENV_ENV_ETOA [$ENV_ENV_ETOA] \n" \
"ARG_ENV_ENV [$ARG_ENV_ENV] ARG_ENV_ARG [$ARG_ENV_ARG] ARG_ENV_ETOA [$ARG_ENV_ETOA] \n" \
"build-args: \n" \
"ENV_ARG_ENV [$ENV_ARG_ENV] ENV_ARG_ARG [$ENV_ARG_ARG] ENV_ARG_ETOA [$ENV_ARG_ETOA]\n" \
"ARG_ARG_ENV [$ARG_ARG_ENV] ARG_ARG_ARG [$ARG_ARG_ARG] ARG_ARG_ETOA [$ARG_ARG_ETOA]\n" \
"both: with ETOA too \n" \
"ENV_AOE_ENV [$ENV_AOE_ENV] ENV_AOE_ARG [$ENV_AOE_ARG] ENV_AOE_ETOA [$ENV_AOE_ETOA]\n" \
"ARG_AOE_ENV [$ARG_AOE_ENV] ARG_AOE_ARG [$ARG_AOE_ARG] ARG_AOE_ETOA [$ARG_AOE_ETOA]\n" \
"ENV: with two dollar \n" \
"ENV_ENV_ETOA2 [$ENV_ENV_ETOA2] ARG_ENV_ETOA2 [$ARG_ENV_ETOA2] ENV_ARG_ETOA2 [$ENV_ARG_ETOA2]\n" \
"ARG_ARG_ETOA2 [$ARG_ARG_ETOA2] ENV_AOE_ETOA2 [$ENV_AOE_ETOA2] ARG_AOE_ETOA2 [$ARG_AOE_ETOA2]\n" \
| column -ts " "
rm -rf "$tmpdir"
unset ENV_ENV_ENV ENV_ENV_ARG ENV_ENV_ETOA
unset ARG_ENV_ENV ARG_ENV_ARG ARG_ENV_ETOA
unset ENV_ARG_ENV ENV_ARG_ARG ENV_ARG_ETOA
unset ARG_ARG_ENV ARG_ARG_ARG ARG_ARG_ETOA
unset ENV_AOE_ENV ENV_AOE_ARG ENV_AOE_ETOA
unset ARG_AOE_ENV ARG_AOE_ARG ARG_AOE_ETOA
unset ENV_ENV_ETOA2 ARG_ENV_ETOA2 ENV_ARG_ETOA2
unset ARG_ARG_ETOA2 ENV_AOE_ETOA2 ARG_AOE_ETOA2
}
echo ">> CLI no parameters"
docker compose --progress plain build \
--no-cache 2>&1 \
| grep " >> " \
| cut -d' ' -f5- \
| column -ts " "
runit
echo ">> CLI environment variables"
ENV_ENV_ENV="A" ENV_ENV_ARG="A" ENV_ENV_ETOA="A" \
ENV_ARG_ENV="A" ENV_ARG_ARG="A" ENV_ARG_ETOA="A" \
ENV_AOE_ENV="A" ENV_AOE_ARG="A" ENV_AOE_ETOA="A" \
docker compose --progress plain build \
--no-cache 2>&1 \
| grep " >> " \
| cut -d' ' -f5- \
| column -ts " "
runit
echo ">> CLI build-arg"
docker compose --progress plain build \
--build-arg ARG_ENV_ENV="B" --build-arg ARG_ENV_ARG="B" --build-arg ARG_ENV_ETOA="B" \
--build-arg ARG_ARG_ENV="B" --build-arg ARG_ARG_ARG="B" --build-arg ARG_ARG_ETOA="B" \
--build-arg ARG_AOE_ENV="B" --build-arg ARG_AOE_ARG="B" --build-arg ARG_AOE_ETOA="B" \
--no-cache 2>&1 \
| grep " >> " \
| cut -d' ' -f5- \
| column -ts " "
runit
echo ">> CLI environment variables and build-arg"
ENV_ENV_ENV="A" ENV_ENV_ARG="A" ENV_ENV_ETOA="A" \
ENV_ARG_ENV="A" ENV_ARG_ARG="A" ENV_ARG_ETOA="A" \
ENV_AOE_ENV="A" ENV_AOE_ARG="A" ENV_AOE_ETOA="A" \
docker compose --progress plain build \
--build-arg ARG_ENV_ENV="B" --build-arg ARG_ENV_ARG="B" --build-arg ARG_ENV_ETOA="B" \
--build-arg ARG_ARG_ENV="B" --build-arg ARG_ARG_ARG="B" --build-arg ARG_ARG_ETOA="B" \
--build-arg ARG_AOE_ENV="B" --build-arg ARG_AOE_ARG="B" --build-arg ARG_AOE_ETOA="B" \
--no-cache 2>&1 \
| grep " >> " \
| cut -d' ' -f5- \
| column -ts " "
runit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment