Bird
Raised Fist0
Dockerdevops~10 mins

Port mapping in Compose in Docker - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Port mapping in Compose
Start Compose file
↓
Define service
↓
Specify ports mapping
↓
Run docker-compose up
↓
Docker maps host port to container port
↓
Service accessible via host port
↓
End
This flow shows how Docker Compose reads the ports section, maps host ports to container ports, and makes the service accessible.
Execution Sample
Docker
services:
  web:
    image: nginx
    ports:
      - "8080:80"
This Compose snippet maps host port 8080 to container port 80 for the web service.
Process Table
StepActionHost PortContainer PortResult
1Read Compose file--Service 'web' found with ports mapping
2Parse ports mapping808080Host port 8080 mapped to container port 80
3Run docker-compose up--Container starts with port mapping
4Access service808080Requests to localhost:8080 forwarded to container:80
5Exit--Port mapping active while container runs
💡 Port mapping ends when container stops or Compose is shut down
Status Tracker
VariableStartAfter Step 2After Step 3Final
host_port-808080808080
container_port-808080
service_statusnot runningnot runningrunningrunning
Key Moments - 2 Insights
Why do we write "8080:80" in ports instead of just "80"?
Because "8080:80" tells Docker to map port 8080 on your computer (host) to port 80 inside the container. Just "80" would map container port 80 to a random available host port.
What happens if the host port 8080 is already in use?
Docker will fail to start the container because it cannot bind to the busy port.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the host port mapped to container port 80?
A443
B80
C8080
D3000
💡 Hint
Check Step 2 in the execution table where ports mapping is parsed.
At which step does the container start running with port mapping?
AStep 2
BStep 3
CStep 1
DStep 4
💡 Hint
Look for the step mentioning 'Container starts with port mapping'.
If you change the ports line to "9090:80", what changes in the variable_tracker?
Ahost_port changes to 9090
Bcontainer_port changes to 9090
Cservice_status changes to stopped
DNo changes
💡 Hint
Host port is the first number in the mapping, check host_port row in variable_tracker.
Concept Snapshot
Port mapping in Docker Compose:
- Use 'ports:' under service to map host:container ports
- Syntax: 'host_port:container_port'
- Allows accessing container service via host port
- Host port must be free to bind
- Mapping active while container runs
Full Transcript
This visual execution shows how Docker Compose reads the ports mapping in a service definition. The Compose file defines a service named 'web' using the nginx image. The ports section maps host port 8080 to container port 80. When 'docker-compose up' runs, Docker starts the container and sets up the port forwarding. Requests to localhost:8080 on the host machine are forwarded to port 80 inside the container, making the web service accessible. The variable tracker shows host_port as 8080 and container_port as 80, with the service status changing from not running to running. Key moments clarify why the mapping syntax uses 'host:container' and what happens if the host port is busy. The quiz tests understanding of port mapping steps and variable changes.

Practice

(1/5)
1. What does the ports section in a Docker Compose file do?
easy
A. It defines the container's CPU and memory limits.
B. It sets environment variables inside the container.
C. It specifies the container's restart policy.
D. It maps ports from the host machine to the container ports.

Solution

  1. Step 1: Understand the role of ports in Compose

    The ports section connects a port on your computer (host) to a port inside the container.
  2. Step 2: Identify what ports does not do

    It does not set environment variables, resource limits, or restart policies.
  3. Final Answer:

    It maps ports from the host machine to the container ports. -> Option D
  4. Quick Check:

    Port mapping = connecting host to container ports [OK]
Hint: Ports section maps host ports to container ports [OK]
Common Mistakes:
  • Confusing ports with environment variables
  • Thinking ports set resource limits
  • Mixing ports with restart policies
2. Which of the following is the correct syntax to map port 8080 on the host to port 80 in a Docker Compose service?
easy
A. ports: - "8080:80"
B. ports: - "80"
C. ports: - "8080"
D. ports: - "80:8080"

Solution

  1. Step 1: Understand port mapping format

    The format is host_port:container_port. To map host 8080 to container 80, write "8080:80".
  2. Step 2: Check each option

    ports: - "80:8080" reverses ports, mapping host 80 to container 8080, which is incorrect. Options B and C specify only one port, which publishes the container port to a randomly assigned host port, not specific host 8080.
  3. Final Answer:

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

    Host port first, container port second [OK]
Hint: Remember format: host_port:container_port [OK]
Common Mistakes:
  • Reversing host and container ports
  • Using single port without mapping
  • Incorrect YAML indentation
3. Given this Compose snippet:
services:
  web:
    image: nginx
    ports:
      - "5000:80"
What happens when you open http://localhost:5000 in your browser?
medium
A. You get a connection refused error because port 80 is not exposed.
B. You access the Nginx server running inside the container on port 80.
C. You access port 5000 inside the container, which is not running any service.
D. The browser will show the Docker Compose file content.

Solution

  1. Step 1: Understand port mapping in the snippet

    Port 5000 on the host is mapped to port 80 inside the container where Nginx listens.
  2. Step 2: Explain browser behavior

    Opening http://localhost:5000 sends requests to container's port 80, so you reach the Nginx server.
  3. Final Answer:

    You access the Nginx server running inside the container on port 80. -> Option B
  4. Quick Check:

    Host port 5000 maps to container port 80 [OK]
Hint: Host port connects to container port service [OK]
Common Mistakes:
  • Thinking port 80 is not exposed
  • Confusing host and container ports
  • Expecting file content instead of service
4. You wrote this Compose ports mapping:
ports:
  - "80:8080"
But your app inside the container listens on port 8080. Why can't you access it via http://localhost:80?
medium
A. The container port 8080 is not exposed correctly to the host port 80.
B. The ports are reversed; host port should be 8080 and container port 80.
C. The app inside the container is not running on port 8080.
D. The Compose file syntax is invalid.

Solution

  1. Step 1: Analyze the port mapping

    Mapping "80:8080" means host port 80 connects to container port 8080.
  2. Step 2: Identify the problem

    If access fails, likely the container app is not listening on port 8080 or firewall blocks host port 80. The mapping syntax is correct.
  3. Final Answer:

    The app inside the container is not running on port 8080. -> Option C
  4. Quick Check:

    Check app listens on container port [OK]
Hint: Check app listens on container port, not just mapping [OK]
Common Mistakes:
  • Assuming ports reversed when they are correct
  • Ignoring app's actual listening port
  • Blaming syntax without checking app
5. You want to run two services in Compose: a web app on container port 3000 and an API on container port 5000. You want to access them on host ports 3000 and 5000 respectively. Which Compose ports section is correct?
hard
A. web: ports: - "3000:3000" api: ports: - "5000:5000"
B. web: ports: - "3000:80" api: ports: - "5000:80"
C. web: ports: - "80:3000" api: ports: - "80:5000"
D. web: ports: - "3000" api: ports: - "5000"

Solution

  1. Step 1: Match host and container ports

    To access web on host 3000 and container 3000, map "3000:3000". Similarly for API, map "5000:5000".
  2. Step 2: Check other options

    web: ports: - "3000:80" api: ports: - "5000:80" maps container ports incorrectly to 80. web: ports: - "80:3000" api: ports: - "80:5000" reverses ports. web: ports: - "3000" api: ports: - "5000" uses short syntax without mapping, which assigns random host ports.
  3. Final Answer:

    web: ports: - "3000:3000" api: ports: - "5000:5000" -> Option A
  4. Quick Check:

    Host and container ports must match for access [OK]
Hint: Map host port to same container port for easy access [OK]
Common Mistakes:
  • Reversing host and container ports
  • Using single port without mapping
  • Mapping both services to same container port
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