Bird
Raised Fist0
Dockerdevops~20 mins

ARG and ENV instructions in Docker - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ARG and ENV Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of ARG and ENV in Dockerfile build
Given the Dockerfile below, what will be the output of the command docker build . when it prints the environment variable?
Docker
FROM alpine
ARG APP_VERSION=1.0
ENV APP_VERSION=$APP_VERSION
RUN echo "App version is $APP_VERSION"
AApp version is null
BApp version is
CApp version is $APP_VERSION
DApp version is 1.0
Attempts:
2 left
💡 Hint
Remember ARG is available only during build, ENV sets environment variables for runtime and build.
🧠 Conceptual
intermediate
1:30remaining
Difference between ARG and ENV in Dockerfile
Which statement correctly describes the difference between ARG and ENV instructions in a Dockerfile?
AARG is only available during build time; ENV is available during build and runtime.
BENV is only available during build time; ARG is available during build and runtime.
CBoth ARG and ENV are only available during runtime.
DARG and ENV are identical and interchangeable.
Attempts:
2 left
💡 Hint
Think about when you can access these variables: during image build or when running the container.
❓ Troubleshoot
advanced
2:00remaining
Why does ENV not get the ARG value at runtime?
Consider this Dockerfile snippet:
ARG PORT=8080
ENV PORT=80
CMD echo $PORT
What will be the output when running the container, and why?
AEmpty output, because PORT is not set at runtime.
B8080, because ARG PORT is used at runtime.
C80, because ENV PORT overrides ARG PORT and is used at runtime.
DSyntax error during build.
Attempts:
2 left
💡 Hint
ENV sets the environment variable inside the image, ARG does not persist after build.
🔀 Workflow
advanced
2:30remaining
Passing build-time ARG and runtime ENV variables
You want to build a Docker image with a build-time variable VERSION defaulting to 1.0, and also allow overriding a runtime environment variable APP_MODE when running the container. Which Dockerfile and run command combination achieves this?
A
Dockerfile:
ENV VERSION=1.0
ARG APP_MODE=production
RUN echo $APP_MODE

Run: docker run -e VERSION=development image
B
Dockerfile:
ARG VERSION=1.0
ENV APP_MODE=production
RUN echo $VERSION

Run: docker run -e APP_MODE=development image
C
Dockerfile:
ARG VERSION=1.0
ENV APP_MODE=production
RUN echo $APP_MODE

Run: docker run image
D
Dockerfile:
ENV VERSION=1.0
ENV APP_MODE=production
RUN echo $VERSION

Run: docker run -e APP_MODE=development image
Attempts:
2 left
💡 Hint
Remember ARG is for build-time, ENV sets default runtime variables, and -e overrides runtime variables.
✅ Best Practice
expert
3:00remaining
Secure handling of sensitive data with ARG and ENV
Which approach is best to avoid leaking sensitive data like passwords in Docker images using ARG and ENV?
AUse ARG for sensitive data and do not set it as ENV to avoid storing it in the image layers.
BUse ENV for sensitive data so it is available at runtime and build time.
CHardcode sensitive data in the Dockerfile for consistency.
DUse ENV and ARG together to store sensitive data in both build and runtime.
Attempts:
2 left
💡 Hint
Think about which variables persist in the final image layers and which do not.

Practice

(1/5)
1. What is the main difference between ARG and ENV instructions in a Dockerfile?
easy
A. ARG defines build-time variables, ENV defines runtime environment variables.
B. ARG defines runtime environment variables, ENV defines build-time variables.
C. ARG and ENV are exactly the same and interchangeable.
D. ARG is used to set default ports, ENV sets user permissions.

Solution

  1. Step 1: Understand ARG usage

    ARG defines variables that are only available during the image build process. They cannot be accessed after the image is built.
  2. Step 2: Understand ENV usage

    ENV sets environment variables that persist in the built image and are available at runtime inside containers.
  3. Final Answer:

    ARG defines build-time variables, ENV defines runtime environment variables. -> Option A
  4. Quick Check:

    ARG = build-time, ENV = runtime [OK]
Hint: Remember: ARG is build-time, ENV is runtime [OK]
Common Mistakes:
  • Confusing ARG as runtime variable
  • Thinking ENV variables are only for build-time
  • Assuming ARG persists in the final image
  • Mixing up the purpose of ARG and ENV
2. Which of the following is the correct syntax to declare a build argument named VERSION with a default value 1.0 in a Dockerfile?
easy
A. ARG VERSION : 1.0
B. ENV VERSION=1.0
C. ARG VERSION=1.0
D. ENV VERSION : 1.0

Solution

  1. Step 1: Recall ARG syntax

    The correct syntax to declare a build argument with a default value is ARG name=value. So ARG VERSION=1.0 is valid.
  2. Step 2: Check other options

    ENV is for environment variables, not build arguments. The colon syntax is invalid in Dockerfile.
  3. Final Answer:

    ARG VERSION=1.0 -> Option C
  4. Quick Check:

    ARG syntax uses equals sign (=) [OK]
Hint: ARG uses '=' to assign default values [OK]
Common Mistakes:
  • Using ENV instead of ARG for build arguments
  • Using colon (:) instead of equals (=)
  • Omitting the default value syntax
  • Confusing ARG and ENV syntax
3. Given the Dockerfile snippet:
ARG APP_VERSION=2.0
ENV APP_VERSION=$APP_VERSION
RUN echo $APP_VERSION

What will be the output of the RUN echo $APP_VERSION command during build if no build argument is passed?
medium
A. Error: variable not found
B. $APP_VERSION
C. empty line
D. 2.0

Solution

  1. Step 1: Understand ARG default value

    ARG APP_VERSION=2.0 sets a default build argument value of "2.0" if none is passed.
  2. Step 2: ENV uses ARG value

    ENV APP_VERSION=$APP_VERSION sets an environment variable using the ARG value, so it becomes "2.0".
  3. Step 3: RUN command output

    RUN echo $APP_VERSION prints the environment variable value "2.0" during build.
  4. Final Answer:

    2.0 -> Option D
  5. Quick Check:

    ARG default used in ENV, echoed as 2.0 [OK]
Hint: ARG default flows into ENV if no override [OK]
Common Mistakes:
  • Expecting empty output if no build arg passed
  • Thinking $APP_VERSION is literal string
  • Assuming error if variable not passed
  • Confusing build-time and runtime variable scopes
4. Identify the error in this Dockerfile snippet:
ARG PORT
ENV PORT=8080
EXPOSE $PORT
medium
A. You cannot use variables in the EXPOSE instruction.
B. The ENV variable PORT overrides ARG but EXPOSE uses $PORT which is not expanded.
C. The ARG variable PORT is not given a default value.
D. The ENV instruction must come before ARG.

Solution

  1. Step 1: Check variable usage in EXPOSE

    The EXPOSE instruction does not support variable expansion. Using $PORT will not work.
  2. Step 2: Validate other statements

    Not giving a default to ARG PORT is allowed. ENV can override ARG. The order of ARG and ENV is not restricted.
  3. Final Answer:

    You cannot use variables in the EXPOSE instruction. -> Option A
  4. Quick Check:

    EXPOSE does not expand variables [OK]
Hint: EXPOSE needs literal port numbers, no variables allowed [OK]
Common Mistakes:
  • Assuming EXPOSE supports variable expansion
  • Thinking ARG must have default value
  • Believing ENV must come after ARG
  • Confusing build-time and runtime variable scopes
5. You want to build a Docker image that accepts a build argument APP_ENV with default production and sets an environment variable APP_ENV inside the container accordingly. Which Dockerfile snippet correctly achieves this?
hard
A. ENV APP_ENV=production ARG APP_ENV ENV APP_ENV=$APP_ENV
B. ARG APP_ENV=production ENV APP_ENV=$APP_ENV
C. ARG APP_ENV ENV APP_ENV=production
D. ENV APP_ENV=$APP_ENV ARG APP_ENV=production

Solution

  1. Step 1: Set ARG with default value

    ARG APP_ENV=production defines the build argument with default "production" if none is passed.
  2. Step 2: Set ENV using ARG value

    ENV APP_ENV=$APP_ENV sets the runtime environment variable to the ARG value, so it reflects the build argument or default.
  3. Step 3: Validate other options

    ENV APP_ENV=production ARG APP_ENV ENV APP_ENV=$APP_ENV sets ENV before ARG which is invalid. ARG APP_ENV ENV APP_ENV=production does not set default for ARG. ENV APP_ENV=$APP_ENV ARG APP_ENV=production uses ENV before ARG which is incorrect.
  4. Final Answer:

    ARG APP_ENV=production ENV APP_ENV=$APP_ENV -> Option B
  5. Quick Check:

    ARG default then ENV from ARG [OK]
Hint: Declare ARG with default, then ENV using ARG variable [OK]
Common Mistakes:
  • Setting ENV before ARG
  • Not providing default value for ARG
  • Overwriting ENV without ARG reference
  • Confusing build-time and runtime variable order
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard