Bird
Raised Fist0
Dockerdevops~20 mins

docker-compose.yml structure - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Docker Compose Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of docker-compose up with multiple services
Given this docker-compose.yml file, what will be the output when running docker-compose up?
Docker
version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
AStarts two containers: one running nginx accessible on port 8080, and one running postgres with password set
BStarts one container combining nginx and postgres in a single service
CFails with error: 'image not found' because alpine tag is invalid
DStarts only the nginx container; postgres is ignored
Attempts:
2 left
💡 Hint
Think about how docker-compose handles multiple services defined under 'services'.
❓ Configuration
intermediate
2:00remaining
Correct syntax for environment variables in docker-compose.yml
Which option shows the correct way to set environment variables for a service in docker-compose.yml?
A
environment:
  - POSTGRES_PASSWORD: example
  - POSTGRES_USER: admin
B
environment:
  POSTGRES_PASSWORD: example
  POSTGRES_USER: admin
C
environment:
  POSTGRES_PASSWORD=example
  POSTGRES_USER=admin
D
environment:
  - POSTGRES_PASSWORD=example
  - POSTGRES_USER=admin
Attempts:
2 left
💡 Hint
Look for the YAML mapping style used for environment variables.
❓ Troubleshoot
advanced
2:00remaining
Error caused by incorrect indentation in docker-compose.yml
What error will occur if the following docker-compose.yml snippet is used?
Docker
version: '3.8'
services:
  web:
  image: nginx:alpine
  ports:
    - "8080:80"
Adocker-compose fails with 'image not found' error
Bdocker-compose runs successfully with no errors
Cdocker-compose ignores the 'ports' section silently
Dyaml.parser.ParserError due to incorrect indentation under 'web'
Attempts:
2 left
💡 Hint
YAML is sensitive to spaces and indentation.
🔀 Workflow
advanced
3:00remaining
Order of steps to add a new service to an existing docker-compose.yml
What is the correct order of steps to add a new service called 'cache' running Redis to an existing docker-compose.yml and start it?
A1,4,2,3
B4,1,2,3
C1,2,4,3
D2,1,4,3
Attempts:
2 left
💡 Hint
Think about editing the file before starting services and verifying after.
✅ Best Practice
expert
3:00remaining
Choosing the best way to share environment variables securely in docker-compose.yml
Which option is the best practice to securely provide environment variables like passwords to services in docker-compose.yml?
AHardcode passwords directly in the environment section of docker-compose.yml
BPass passwords as command line arguments when running docker-compose up
CUse an external .env file and reference variables in docker-compose.yml
DStore passwords in the image and do not specify in docker-compose.yml
Attempts:
2 left
💡 Hint
Think about separating secrets from code files.

Practice

(1/5)
1. What is the main purpose of the services section in a docker-compose.yml file?
easy
A. To define the containers that will run and their settings
B. To specify the Docker version to use
C. To list the volumes to be created
D. To set environment variables globally

Solution

  1. Step 1: Understand the role of services

    The services section lists all containers to run and their configurations.
  2. Step 2: Compare with other sections

    version sets compose file version, volumes defines shared storage, environment variables are per service or global but not the main purpose of services.
  3. Final Answer:

    To define the containers that will run and their settings -> Option A
  4. Quick Check:

    services = container definitions [OK]
Hint: Services section lists containers and their configs [OK]
Common Mistakes:
  • Confusing version with services
  • Thinking volumes are defined inside services only
  • Assuming environment variables are global by default
2. Which of the following is the correct way to specify a port mapping in docker-compose.yml under a service named web?
easy
A. port: - "80:80"
B. ports: - "80:80"
C. ports: - 80:80
D. mapping: - "80:80"

Solution

  1. Step 1: Check correct key for port mapping

    The correct key is ports (plural), not port or mapping.
  2. Step 2: Validate syntax for port mapping

    Port mappings must be strings with quotes like "80:80" to avoid YAML parsing issues.
  3. Final Answer:

    ports: - "80:80" -> Option B
  4. Quick Check:

    Use ports with quoted strings [OK]
Hint: Use 'ports' key with quoted strings for mappings [OK]
Common Mistakes:
  • Using singular 'port' instead of 'ports'
  • Not quoting port mappings causing YAML errors
  • Using wrong key like 'mapping'
3. Given this docker-compose.yml snippet:
version: '3'
services:
  app:
    image: myapp:latest
    environment:
      - DEBUG=true
    ports:
      - "5000:5000"
What will happen when you run docker-compose up?
medium
A. The container runs but port 5000 is not exposed
B. An error occurs because environment variables must be in key:value format
C. The image 'myapp:latest' is ignored and default image is used
D. A container named 'app' runs with DEBUG=true and port 5000 exposed

Solution

  1. Step 1: Analyze environment variable format

    Environment variables can be listed as strings like "DEBUG=true" in docker-compose.yml.
  2. Step 2: Check port mapping and image usage

    Port 5000 is correctly mapped and image 'myapp:latest' will be used to run the container.
  3. Final Answer:

    A container named 'app' runs with DEBUG=true and port 5000 exposed -> Option D
  4. Quick Check:

    Env vars as strings and ports mapped = container runs correctly [OK]
Hint: Env vars as strings and ports quoted work fine [OK]
Common Mistakes:
  • Thinking environment variables must be key:value pairs
  • Assuming ports need special syntax to expose
  • Believing image name is ignored if not official
4. Identify the error in this docker-compose.yml snippet:
version: '3'
services:
  db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: example
medium
A. Port mapping should be quoted strings like "5432:5432"
B. Environment variables must be listed as a sequence, not mapping
C. The version '3' is invalid and should be '3.8'
D. The image name 'postgres' must include a tag

Solution

  1. Step 1: Check port mapping syntax

    Port mappings should be quoted strings like "5432:5432" to avoid YAML parsing errors.
  2. Step 2: Validate environment variable format

    Environment variables can be mappings like POSTGRES_PASSWORD: example, which is correct here.
  3. Final Answer:

    Port mapping should be quoted strings like "5432:5432" -> Option A
  4. Quick Check:

    Port mappings need quotes to parse correctly [OK]
Hint: Always quote port mappings to avoid YAML errors [OK]
Common Mistakes:
  • Not quoting port mappings
  • Confusing environment variable formats
  • Thinking version '3' is invalid
5. You want to run two services, web and db, where web depends on db. Which docker-compose.yml snippet correctly expresses this dependency and shares a volume named data between them?
hard
A. version: '3' services: web: image: webapp depends_on: - db db: image: postgres volumes: data: external: true
B. version: '3' services: web: image: webapp volumes: - data:/var/www/data db: image: postgres depends_on: - web volumes: - data:/var/lib/postgresql/data volumes: data:
C. version: '3' services: web: image: webapp depends_on: - db volumes: - data:/var/www/data db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data:
D. version: '3' services: web: image: webapp depends_on: - db volumes: - /data:/var/www/data db: image: postgres volumes: - /data:/var/lib/postgresql/data

Solution

  1. Step 1: Check dependency declaration

    web depends on db using depends_on with - db under web.
  2. Step 2: Verify volume sharing and declaration

    Both services use the named volume data mapped to their paths, and volumes: section declares data properly.
  3. Final Answer:

    version: '3' services: web: image: webapp depends_on: - db volumes: - data:/var/www/data db: image: postgres volumes: - data:/var/lib/postgresql/data volumes: data: -> Option C
  4. Quick Check:

    depends_on + named volume declared under volumes = correct [OK]
Hint: Use depends_on and declare shared volumes under volumes [OK]
Common Mistakes:
  • Reversing depends_on order
  • Using host paths instead of named volumes
  • Not declaring volumes section for named volumes
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