0
0
Dockerdevops~5 mins

EXPOSE instruction for ports in Docker - Commands & Configuration

Choose your learning style9 modes available
Introduction
When you run an app inside a container, it often listens on a port. The EXPOSE instruction in a Dockerfile tells Docker which port the app will use, so you can connect to it from outside the container.
When you want to tell Docker which port your app inside the container listens on.
When you plan to map container ports to your computer or server ports.
When you want to document the ports your containerized app uses for others.
When you build a Docker image that will run a web server or API service.
When you want to make sure your container’s network traffic is accessible.
Config File - Dockerfile
Dockerfile
FROM nginx:1.23.4
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

FROM nginx:1.23.4 sets the base image to nginx web server version 1.23.4.

EXPOSE 80 tells Docker that the container listens on port 80.

CMD runs nginx in the foreground so the container stays alive.

Commands
Builds a Docker image named 'my-nginx-app' from the Dockerfile in the current folder.
Terminal
docker build -t my-nginx-app .
Expected OutputExpected
Sending build context to Docker daemon 2.048kB Step 1/3 : FROM nginx:1.23.4 ---> 4bb46517cac3 Step 2/3 : EXPOSE 80 ---> Using cache ---> 7f3b1a9a5f3e Step 3/3 : CMD ["nginx", "-g", "daemon off;"] ---> Using cache ---> 9c1a2f3b4d5e Successfully built 9c1a2f3b4d5e Successfully tagged my-nginx-app:latest
Runs the container in detached mode, mapping your computer's port 8080 to the container's port 80 so you can access the web server.
Terminal
docker run -d -p 8080:80 my-nginx-app
Expected OutputExpected
e3b1a2c4d5f6a7b8c9d0e1f2a3b4c5d6e7f8g9h0i1j2k3l4m5n6o7p8q9r0s1t2
-d - Run container in background (detached mode)
-p 8080:80 - Map host port 8080 to container port 80
Checks if the nginx web server inside the container is reachable through port 8080 on your computer.
Terminal
curl http://localhost:8080
Expected OutputExpected
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> </head> <body> <h1>Welcome to nginx!</h1> </body> </html>
Key Concept

EXPOSE in a Dockerfile declares the port your app listens on, helping Docker and users know how to connect to your container.

Common Mistakes
Not using EXPOSE in the Dockerfile and expecting the port to be known automatically.
Docker does not know which ports your app uses without EXPOSE, so documentation and some tools may not work properly.
Always add EXPOSE with the correct port number your app listens on.
Running the container without mapping ports using -p flag.
Even if EXPOSE is set, the container port is not accessible from your computer unless you map it with -p.
Use docker run -p hostPort:containerPort to access the app from outside.
Mapping the wrong host port to container port.
If you map to a port already in use or the wrong port, your app won't be reachable as expected.
Check which ports are free on your host and map correctly, e.g., -p 8080:80.
Summary
EXPOSE in Dockerfile tells Docker which port the app inside listens on.
Build the image with docker build and run it with docker run -p to map ports.
Use curl or a browser to check the app is reachable on the mapped port.