Bird
Raised Fist0
Spring Bootframework~20 mins

docker-compose for services in Spring Boot - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Docker Compose Mastery - Spring Boot
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when you run this docker-compose.yml?

Given this docker-compose.yml file for two Spring Boot services, what will be the result after running docker-compose up?

version: '3.8'
services:
  app1:
    image: springboot-app1:latest
    ports:
      - "8080:8080"
  app2:
    image: springboot-app2:latest
    ports:
      - "8081:8080"
    depends_on:
      - app1
Spring Boot
version: '3.8'
services:
  app1:
    image: springboot-app1:latest
    ports:
      - "8080:8080"
  app2:
    image: springboot-app2:latest
    ports:
      - "8081:8080"
    depends_on:
      - app1
AOnly app2 starts; app1 is ignored because it has no depends_on.
BBoth app1 and app2 start; app2 waits for app1 to start before launching.
COnly app1 starts; app2 fails because depends_on is not a valid key.
DBoth app1 and app2 start simultaneously without waiting for each other.
Attempts:
2 left
💡 Hint

Check what depends_on does in docker-compose.

📝 Syntax
intermediate
2:00remaining
Which docker-compose.yml snippet is valid for linking two Spring Boot services?

Choose the valid docker-compose.yml snippet that correctly links serviceA and serviceB so serviceB can access serviceA by hostname.

A
version: '3'
services:
  serviceA:
    image: springboot-a
  serviceB:
    image: springboot-b
    depends_on:
      - serviceA
B
version: '3'
services:
  serviceA:
    image: springboot-a
  serviceB:
    image: springboot-b
    depends_on:
      - serviceA
    links:
      - serviceA
C
version: '3'
services:
  serviceA:
    image: springboot-a
  serviceB:
    image: springboot-b
    links:
      - serviceA
D
version: '3'
services:
  serviceA:
    image: springboot-a
  serviceB:
    image: springboot-b
    network_mode: service:serviceA
Attempts:
2 left
💡 Hint

Remember that links is deprecated but still valid in version 3 for hostname resolution.

❓ state_output
advanced
2:00remaining
What is the exposed port of app2 in this docker-compose setup?

Given this docker-compose.yml, what port on the host machine will map to app2's internal port 8080?

version: '3.8'
services:
  app1:
    image: springboot-app1
    ports:
      - "8080:8080"
  app2:
    image: springboot-app2
    ports:
      - "9090:8080"
Spring Boot
version: '3.8'
services:
  app1:
    image: springboot-app1
    ports:
      - "8080:8080"
  app2:
    image: springboot-app2
    ports:
      - "9090:8080"
A8080 and 9090
B8080
C8081
D9090
Attempts:
2 left
💡 Hint

Look at the port mapping format: hostPort:containerPort.

🔧 Debug
advanced
2:00remaining
Why does app2 fail to connect to app1 in this docker-compose setup?

Consider this docker-compose.yml snippet:

version: '3.8'
services:
  app1:
    image: springboot-app1
    ports:
      - "8080:8080"
  app2:
    image: springboot-app2
    ports:
      - "8081:8080"

App2 tries to connect to app1 using localhost:8080 but fails. Why?

Spring Boot
version: '3.8'
services:
  app1:
    image: springboot-app1
    ports:
      - "8080:8080"
  app2:
    image: springboot-app2
    ports:
      - "8081:8080"
ABecause app2's localhost refers to itself, not app1; it should use the service name 'app1' instead.
BBecause the ports are mapped incorrectly; app1 should expose 8081 instead of 8080.
CBecause app2 needs a depends_on key to start after app1.
DBecause docker-compose does not support multiple services communicating.
Attempts:
2 left
💡 Hint

Remember how Docker networking works between containers.

🧠 Conceptual
expert
2:00remaining
What is the effect of adding 'restart: always' to a service in docker-compose?

In a docker-compose.yml file for Spring Boot services, what does adding restart: always do?

AIt makes the service restart automatically if it stops or the Docker daemon restarts.
BIt forces the service to restart every 5 minutes regardless of status.
CIt disables manual stopping of the service via docker-compose commands.
DIt restarts the service only if the container exits with an error code.
Attempts:
2 left
💡 Hint

Check the official Docker Compose restart policies.

Practice

(1/5)
1. What is the main purpose of using docker-compose with Spring Boot services?
easy
A. To run multiple related services together with one configuration file
B. To compile Java code faster
C. To replace the Spring Boot framework
D. To write unit tests automatically

Solution

  1. Step 1: Understand what docker-compose does

    Docker Compose is a tool to run multiple containers (services) together using one YAML file.
  2. Step 2: Relate to Spring Boot services

    It helps run your Spring Boot app alongside databases or other services easily.
  3. Final Answer:

    To run multiple related services together with one configuration file -> Option A
  4. Quick Check:

    docker-compose = run multiple services [OK]
Hint: Remember: docker-compose manages multiple containers easily [OK]
Common Mistakes:
  • Thinking docker-compose compiles code
  • Confusing docker-compose with testing tools
  • Believing it replaces Spring Boot
2. Which of the following is the correct way to specify a service's port mapping in a docker-compose.yml file?
easy
A. ports: - "8080:8080"
B. ports: 8080:8080
C. port: 8080->8080
D. expose: 8080:8080

Solution

  1. Step 1: Recall docker-compose port syntax

    Ports are listed as a YAML array with dash and quotes, like ports: - "hostPort:containerPort".
  2. Step 2: Check options

    ports: - "8080:8080" matches the correct YAML syntax for port mapping.
  3. Final Answer:

    ports: - "8080:8080" -> Option A
  4. Quick Check:

    Port mapping uses dash and quotes in YAML [OK]
Hint: Use dash and quotes for ports in docker-compose YAML [OK]
Common Mistakes:
  • Omitting dash for list items
  • Using wrong key 'port' instead of 'ports'
  • Confusing 'expose' with 'ports'
3. Given this docker-compose.yml snippet:
services:
  app:
    image: springboot-app
    ports:
      - "8080:8080"
    depends_on:
      - db
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

What happens when you run docker-compose up?
medium
A. docker-compose throws a syntax error
B. Only app service starts, db is ignored
C. db starts but app fails due to missing environment
D. Both app and db services start, app waits for db to start

Solution

  1. Step 1: Understand depends_on behavior

    The app service depends on db, so docker-compose starts db first, then app.
  2. Step 2: Check environment and ports

    db has required environment variable, app exposes port 8080 correctly.
  3. Final Answer:

    Both app and db services start, app waits for db to start -> Option D
  4. Quick Check:

    depends_on starts dependencies first [OK]
Hint: depends_on starts services in order, no syntax errors here [OK]
Common Mistakes:
  • Assuming depends_on waits for full readiness
  • Thinking db is ignored without explicit start
  • Confusing environment variables with ports
4. You wrote this docker-compose.yml but your Spring Boot app fails to connect to the database:
services:
  app:
    image: springboot-app
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/mydb
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

What is the likely problem?
medium
A. POSTGRES_PASSWORD is incorrect environment variable
B. Missing port mapping for db service
C. The app tries to connect to localhost instead of the db service hostname
D. The app image name is wrong

Solution

  1. Step 1: Check datasource URL in app environment

    The app uses jdbc URL with 'localhost', which inside container means itself, not db service.
  2. Step 2: Understand docker-compose networking

    Services communicate by service name, so URL should use 'db' hostname, not 'localhost'.
  3. Final Answer:

    The app tries to connect to localhost instead of the db service hostname -> Option C
  4. Quick Check:

    Use service name, not localhost, for inter-service DB URL [OK]
Hint: Use service names, not localhost, inside docker-compose networks [OK]
Common Mistakes:
  • Assuming localhost works inside containers
  • Forgetting to map ports for external access
  • Misnaming environment variables
5. You want to run a Spring Boot app with a MySQL database using docker-compose. You want the database to keep data even if the container stops. Which snippet correctly adds persistent storage for the database?
hard
A. volumes: - /var/lib/mysql:/db-data volumes: db-data:
B. volumes: - db-data:/var/lib/mysql volumes: db-data:
C. volumes: - db-data:/mysql/data volumes: mysql-data:
D. volumes: - /mysql/data:/db-data volumes: db-data:

Solution

  1. Step 1: Understand volume syntax for persistence

    Docker volumes map a named volume to the container path where data is stored, e.g., db-data:/var/lib/mysql.
  2. Step 2: Check volume declaration

    The named volume must be declared under top-level volumes: with the same name.
  3. Final Answer:

    volumes: - db-data:/var/lib/mysql volumes: db-data: -> Option B
  4. Quick Check:

    Named volume mapped to container path with declaration [OK]
Hint: Map named volume to container data path and declare it below [OK]
Common Mistakes:
  • Reversing host and container paths
  • Not declaring the named volume
  • Using wrong container data directory
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