Exposing ports to host in Docker - Mini Project: Build & Apply
Dockerfile with these exact lines to set up a basic Python web server listening on port 8000:
FROM python:3.12-slim
CMD ["python", "-m", "http.server", "8000"]This Dockerfile uses Python's built-in HTTP server on port 8000.
EXPOSE 8000 to the Dockerfile to declare that the container listens on port 8000.The EXPOSE instruction tells Docker which port the container will use.
docker run -d -p 8080:8000 webserver to map container port 8000 to host port 8080. Assume the image is named webserver.The -p flag maps host port 8080 to container port 8000.
curl http://localhost:8080 to check if the web server running inside the container is reachable from your host machine.The curl command fetches the web page served by the container.
Practice
What does the Docker option -p 8080:80 do when running a container?
Solution
Step 1: Understand Docker port mapping syntax
The syntax-p host_port:container_portmeans the host port is on the left and container port is on the right.Step 2: Apply to given ports
Given-p 8080:80, port 80 inside the container is accessible via port 8080 on the host.Final Answer:
It maps port 80 inside the container to port 8080 on the host machine. -> Option BQuick Check:
host_port:container_port = 8080:80 [OK]
- Confusing host and container ports order
- Thinking ports are blocked instead of mapped
- Assuming ports are exposed but not mapped
Which of the following is the correct Docker command to expose container port 5000 to host port 3000?
docker run ... myapp
Solution
Step 1: Recall port mapping syntax
The correct syntax is-p host_port:container_port.Step 2: Match ports to command
To expose container port 5000 on host port 3000, use-p 3000:5000.Final Answer:
docker run -p 3000:5000 myapp -> Option AQuick Check:
host_port:container_port = 3000:5000 [OK]
- Swapping host and container ports
- Using --expose with port mapping syntax
- Omitting container port in -p option
What will be the output when running this command and then accessing http://localhost:8080?
docker run -d -p 8080:80 nginx
Solution
Step 1: Understand the command
The command runs Nginx container detached with port 80 inside mapped to host port 8080.Step 2: Accessing localhost:8080
Since port 8080 on host maps to container's port 80 where Nginx serves, accessing localhost:8080 shows Nginx default page.Final Answer:
You will see the default Nginx welcome page in your browser. -> Option DQuick Check:
Port mapping works, Nginx serves on port 80 [OK]
- Assuming port 80 is not exposed automatically
- Expecting syntax error from correct command
- Thinking container runs but ports are closed
Identify the error in this Docker command that tries to expose port 3306:
docker run -p 3306: mysql
Solution
Step 1: Check -p option syntax
The-poption requires both host and container ports inhost_port:container_portformat.Step 2: Analyze given command
The command uses-p 3306:without specifying container port, which is invalid syntax.Final Answer:
Missing container port in the -p option. -> Option AQuick Check:
-p requires host_port:container_port [OK]
- Using only one port number with -p
- Confusing --expose and -p options
- Assuming image name causes port errors
You want to run two containers both exposing port 80 inside, but accessible on host ports 8081 and 8082 respectively. Which Docker commands correctly achieve this?
Solution
Step 1: Understand port mapping for multiple containers
Each container exposes port 80 internally. To avoid conflict, map to different host ports like 8081 and 8082.Step 2: Check each option's correctness
docker run -d -p 8081:80 app1 && docker run -d -p 8082:80 app2 correctly maps host ports 8081 and 8082 to container port 80 for app1 and app2 respectively. Others misuse port order or --expose.Final Answer:
docker run -d -p 8081:80 app1 && docker run -d -p 8082:80 app2 -> Option CQuick Check:
Host ports differ, container ports 80 mapped correctly [OK]
- Swapping host and container ports
- Using same host port for multiple containers
- Confusing --expose with port mapping
Ready to prove it?
Pass the test and this pattern moves unknown
