Bird
Raised Fist0
Dockerdevops~20 mins

Multiple Compose files (override) in Docker - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Compose Override Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
1:30remaining
Output of Docker Compose with override file
Given two Docker Compose files, docker-compose.yml and docker-compose.override.yml, what will be the value of the environment variable MODE in the running container?

docker-compose.yml:
services:
  app:
    image: myapp:latest
    environment:
      - MODE=production

docker-compose.override.yml:
services:
  app:
    environment:
      - MODE=development


Command run: docker compose up
AMODE=development
BMODE=production,MODE=development (both set)
CMODE=production
DNo MODE environment variable set
Attempts:
2 left
💡 Hint
Override files merge and override keys, environment variables in override replace the original.
❓ Configuration
intermediate
1:30remaining
Correct syntax to override ports in Compose override file
You have a base docker-compose.yml with a service exposing port 80. You want to override it in docker-compose.override.yml to expose port 8080 instead. Which override snippet correctly replaces the port mapping?
A
services:
  web:
    ports:
      - 8080:80
B
services:
  web:
    ports:
      - "8080:80"
C
services:
  web:
    ports:
      - 80:8080
D
services:
  web:
    expose:
      - "8080"
Attempts:
2 left
💡 Hint
Ports must be strings with quotes and format hostPort:containerPort.
❓ Troubleshoot
advanced
2:00remaining
Why does the override file not change the command?
You have this base Compose file snippet:
services:
  app:
    image: myapp
    command: run-server

And this override snippet:
services:
  app:
    command: run-debug

After running docker compose up, the container still runs run-server. What is the most likely reason?
AThe override file is not named correctly or not detected by Docker Compose
BThe command key cannot be overridden in Compose override files
CDocker Compose caches the command and ignores overrides
DThe image 'myapp' has an entrypoint that ignores the command
Attempts:
2 left
💡 Hint
Check the file names and how Docker Compose loads override files automatically.
🔀 Workflow
advanced
2:00remaining
Using multiple override files in Docker Compose
You want to run Docker Compose with two override files: docker-compose.override.yml and docker-compose.prod.yml. Which command correctly applies both overrides with the base docker-compose.yml?
Adocker compose -f docker-compose.override.yml -f docker-compose.prod.yml up
Bdocker compose up -f docker-compose.override.yml -f docker-compose.prod.yml
Cdocker compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.prod.yml up
Ddocker compose up --override-files docker-compose.override.yml docker-compose.prod.yml
Attempts:
2 left
💡 Hint
Use multiple -f flags with the base file first, then overrides in order.
✅ Best Practice
expert
2:30remaining
Best practice for sensitive data in multiple Compose files
You have a base Compose file and an override file for production. You need to keep sensitive environment variables out of version control but still use them in production. What is the best practice?
APass sensitive variables as command line arguments when running docker compose up
BHardcode sensitive variables directly in the override Compose file for production
CInclude sensitive variables in the base Compose file but encrypt the file in version control
DStore sensitive variables in a separate .env file and reference it in the override file, which is excluded from version control
Attempts:
2 left
💡 Hint
Use environment files and .gitignore to keep secrets safe.

Practice

(1/5)
1. What is the main purpose of using multiple Docker Compose files with the -f option?
easy
A. To override or extend settings without changing the original compose file
B. To run multiple containers simultaneously
C. To create multiple Docker images at once
D. To speed up Docker container startup time

Solution

  1. Step 1: Understand the role of multiple Compose files

    Multiple Compose files allow you to customize or override configurations without editing the original file.
  2. Step 2: Recognize the use of the -f option

    The -f option lets you specify multiple files, where later files override earlier ones.
  3. Final Answer:

    To override or extend settings without changing the original compose file -> Option A
  4. Quick Check:

    Multiple Compose files = override settings [OK]
Hint: Multiple files with -f override earlier settings [OK]
Common Mistakes:
  • Thinking multiple files run containers simultaneously
  • Confusing Compose files with Docker images
  • Assuming it speeds up container startup
2. Which of the following is the correct syntax to use two Docker Compose files named docker-compose.yml and docker-compose.override.yml together?
easy
A. docker-compose up -f docker-compose.yml -f docker-compose.override.yml
B. docker-compose -f docker-compose.yml -f docker-compose.override.yml up
C. docker-compose up docker-compose.yml docker-compose.override.yml
D. docker-compose -f up docker-compose.yml docker-compose.override.yml

Solution

  1. Step 1: Recall the correct order of options

    The -f option must come before the command and can be repeated for multiple files.
  2. Step 2: Verify the syntax correctness

    docker-compose -f docker-compose.yml -f docker-compose.override.yml up correctly places -f flags before the up command and lists both files.
  3. Final Answer:

    docker-compose -f docker-compose.yml -f docker-compose.override.yml up -> Option B
  4. Quick Check:

    Correct order: docker-compose -f file1 -f file2 up [OK]
Hint: Place all -f options before the command [OK]
Common Mistakes:
  • Putting -f after the command
  • Listing files without -f
  • Mixing command and file order
3. Given these two Compose files:
docker-compose.yml:
services:
  web:
    image: nginx:1.19
    ports:
      - "80:80"

docker-compose.override.yml:
services:
  web:
    image: nginx:1.21
    environment:
      - DEBUG=true

What image version will the web service use when running docker-compose -f docker-compose.yml -f docker-compose.override.yml up?
medium
A. nginx:1.19
B. nginx:latest
C. It will cause an error due to conflicting images
D. nginx:1.21

Solution

  1. Step 1: Understand override behavior

    The second file overrides matching keys from the first file, including the image version.
  2. Step 2: Identify the image in the override file

    The override file sets image: nginx:1.21, which replaces nginx:1.19.
  3. Final Answer:

    nginx:1.21 -> Option D
  4. Quick Check:

    Override file image replaces base image [OK]
Hint: Later files override earlier image settings [OK]
Common Mistakes:
  • Assuming base file image stays unchanged
  • Thinking it defaults to latest
  • Expecting an error from override
4. You run docker-compose -f base.yml -f override.yml up but get an error: ERROR: Service 'app' has both 'build' and 'image' specified. What is the likely cause?
medium
A. Both files define 'app' service with conflicting 'build' and 'image' keys
B. You forgot to specify the -d flag
C. The override file is missing the 'app' service definition
D. Docker Compose does not support multiple files

Solution

  1. Step 1: Understand the error message

    The error says the 'app' service has both 'build' and 'image' keys, which Docker Compose disallows.
  2. Step 2: Identify conflict from multiple files

    When combining files, if one file sets 'build' and another sets 'image' for the same service, this conflict occurs.
  3. Final Answer:

    Both files define 'app' service with conflicting 'build' and 'image' keys -> Option A
  4. Quick Check:

    Conflicting keys in combined files cause this error [OK]
Hint: Check for conflicting keys in combined service definitions [OK]
Common Mistakes:
  • Thinking -d flag fixes this error
  • Assuming missing service causes error
  • Believing multiple files are unsupported
5. You have a base Compose file docker-compose.yml and an override docker-compose.prod.yml that changes the web service's environment variables and ports. You want to run the production setup but keep the base file unchanged. Which command correctly applies the override and ensures the web service uses the production settings?
hard
A. docker-compose up -f docker-compose.yml -f docker-compose.prod.yml -d
B. docker-compose -f docker-compose.prod.yml -f docker-compose.yml up -d
C. docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
D. docker-compose up -d -f docker-compose.yml -f docker-compose.prod.yml

Solution

  1. Step 1: Recall override order

    The last file listed with -f overrides earlier files.
  2. Step 2: Check command syntax and order

    docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d correctly lists base file first, then production override, followed by the up -d command.
  3. Final Answer:

    docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d -> Option C
  4. Quick Check:

    Last -f file overrides earlier ones [OK]
Hint: List base file first, override file second with -f [OK]
Common Mistakes:
  • Reversing file order so base overrides override
  • Placing -f after the command
  • Omitting -d for detached mode
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