Bird
Raised Fist0
Dockerdevops~20 mins

Defining services in Docker - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Docker Service Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of docker-compose service start command
What is the output when you run docker-compose up -d with this docker-compose.yml file?
Docker
version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
ACreating network "default" with the default driver\nCreating default_web_1 ... done
BError: Service 'web' has no container_name specified
CCreating network "default" with the default driver\nCreating volume "default_web_data" with default driver\nCreating default_web_1 ... done
DStarting web ... done
Attempts:
2 left
💡 Hint
Focus on what docker-compose creates by default when starting a service without volumes.
❓ Configuration
intermediate
2:00remaining
Correct service definition for environment variables
Which service definition correctly sets environment variables for a service in docker-compose.yml?
A
services:
  app:
    image: myapp
    environment:
      - DEBUG=true
      - PORT=3000
B
services:
  app:
    image: myapp
    env:
      DEBUG: true
      PORT: 3000
C
services:
  app:
    image: myapp
    environment:
      DEBUG: true
      PORT: 3000
D
services:
  app:
    image: myapp
    env_vars:
      - DEBUG=true
      - PORT=3000
Attempts:
2 left
💡 Hint
Check the correct key name and format for environment variables in docker-compose.
❓ Troubleshoot
advanced
2:00remaining
Troubleshooting service port binding error
You defined this service in docker-compose.yml but get an error when starting it: Bind for 0.0.0.0:80 failed: port is already allocated. What is the cause?
Docker
services:
  web:
    image: nginx
    ports:
      - "80:80"
AAnother process on the host is already using port 80, so Docker cannot bind it.
BThe image 'nginx' does not expose port 80, causing the error.
CThe ports syntax is incorrect; it should be '80->80' instead of '80:80'.
DDocker daemon is not running, so ports cannot be bound.
Attempts:
2 left
💡 Hint
Check if any other application is using the host port before Docker tries to bind it.
🔀 Workflow
advanced
2:00remaining
Order of steps to update a running service with new image
What is the correct order of commands to update a running service to use a new image version in Docker Compose?
A3,2,1,4
B1,3,2,4
C1,2,4,3
D3,1,2,4
Attempts:
2 left
💡 Hint
You want to stop the old containers before pulling and starting new ones.
✅ Best Practice
expert
2:00remaining
Best practice for defining multiple services sharing a network
Which docker-compose service definition best ensures two services share the same user-defined network named 'appnet'?
A
networks:
  appnet:
services:
  service1:
    image: alpine
    networks:
      - appnet
  service2:
    image: alpine
    networks:
      - appnet
B
services:
  service1:
    image: alpine
    networks:
      - appnet
  service2:
    image: alpine
    networks:
      - appnet
networks:
  appnet:
    driver: bridge
C
services:
  service1:
    image: alpine
  service2:
    image: alpine
networks:
  appnet:
    driver: bridge
D
services:
  service1:
    image: alpine
  service2:
    image: alpine
    networks:
      - appnet
Attempts:
2 left
💡 Hint
Define the network under 'networks' and attach it explicitly to each service.

Practice

(1/5)
1. What is the main purpose of defining services in a Docker Compose file?
easy
A. To install software inside containers manually
B. To write shell scripts for container startup
C. To group containers with their settings for easy management
D. To create virtual machines inside Docker

Solution

  1. Step 1: Understand the role of services in Docker Compose

    Services define how containers run, including images, ports, and environment variables.
  2. Step 2: Recognize the benefit of grouping containers

    Grouping containers with their settings allows easy start, stop, and management of multiple containers together.
  3. Final Answer:

    To group containers with their settings for easy management -> Option C
  4. Quick Check:

    Services group containers = D [OK]
Hint: Services group containers and settings in one file [OK]
Common Mistakes:
  • Confusing services with scripts
  • Thinking services create virtual machines
  • Believing services install software manually
2. Which of the following is the correct way to define a service named web using the image nginx in a Docker Compose YAML file?
easy
A. services: web: image: nginx
B. services: web: image nginx
C. service: web: image: nginx
D. services: web: img: nginx

Solution

  1. Step 1: Check the correct YAML key for services

    The top-level key must be services (plural), not service.
  2. Step 2: Verify the syntax for image definition

    The correct syntax is image: nginx with a colon and proper indentation.
  3. Final Answer:

    services: web: image: nginx -> Option A
  4. Quick Check:

    Correct YAML keys and syntax = B [OK]
Hint: Use 'services:' plural and 'image:' with colon [OK]
Common Mistakes:
  • Using 'service' instead of 'services'
  • Missing colon after 'image'
  • Using 'img' instead of 'image'
3. Given this Docker Compose snippet, what port will be accessible on the host machine?
services:
  app:
    image: myapp
    ports:
      - "8080:80"
medium
A. Port 80 on the host
B. Port 8080 on the host
C. Port 80 inside the container only
D. Port 8080 inside the container only

Solution

  1. Step 1: Understand port mapping syntax

    The format "host_port:container_port" means host port 8080 maps to container port 80.
  2. Step 2: Identify which port is exposed on the host

    Port 8080 on the host machine will forward traffic to port 80 inside the container.
  3. Final Answer:

    Port 8080 on the host -> Option B
  4. Quick Check:

    Host port is first in mapping = A [OK]
Hint: Host port is before colon in ports mapping [OK]
Common Mistakes:
  • Confusing host and container ports
  • Thinking container port is exposed on host
  • Ignoring quotes around ports
4. Identify the error in this Docker Compose service definition:
services:
  db:
    image: postgres
    ports:
      - "5432:"
    environment:
      POSTGRES_PASSWORD: example
medium
A. Missing container port in ports mapping
B. Environment variable name is incorrect
C. Image name should be capitalized
D. Service name cannot be 'db'

Solution

  1. Step 1: Check ports syntax

    Ports must be mapped as "host_port:container_port" or just container port. Here, "5432:" is invalid because missing container port after colon.
  2. Step 2: Confirm environment and image correctness

    Environment variable and image name are correct; service name 'db' is valid.
  3. Final Answer:

    Missing container port in ports mapping -> Option A
  4. Quick Check:

    Ports need host:container or container port only = A [OK]
Hint: Ports need host:container or container port only [OK]
Common Mistakes:
  • Using only one port number with quotes
  • Assuming environment variable names are wrong
  • Thinking service names have restrictions
5. You want to define two services, frontend and backend, where frontend depends on backend to start first. Which is the correct way to express this dependency in Docker Compose?
hard
A. services: frontend: image: frontend-image backend: image: backend-image depends_on: - frontend
B. services: backend: image: backend-image depends_on: - frontend frontend: image: frontend-image
C. services: frontend: image: frontend-image links: - backend backend: image: backend-image
D. services: frontend: image: frontend-image depends_on: - backend backend: image: backend-image

Solution

  1. Step 1: Understand 'depends_on' usage

    The depends_on key under a service lists services that must start before it.
  2. Step 2: Identify correct dependency direction

    Since frontend depends on backend, frontend should have depends_on: - backend.
  3. Step 3: Check other options for correctness

    The incorrect options either reverse the dependency direction or use the deprecated links for dependency control.
  4. Final Answer:

    services: frontend: image: frontend-image depends_on: - backend backend: image: backend-image -> Option D
  5. Quick Check:

    depends_on under dependent service = C [OK]
Hint: Put depends_on under service that waits for others [OK]
Common Mistakes:
  • Reversing dependency direction
  • Using links instead of depends_on
  • Placing depends_on under wrong service
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