Curso Docker - 14. Exponer puertos en Docker

A continuación vamos a crear un nuevo contenedor basándonos en la imagen que acabamos de crear:

docker run -d --name webserver apache-php72-webserver:1.0

La opción -d sirve para ejecutar un contenedor en segundo plano y mostrar su identificador al crearlo.

Si entramos en localhost, vemos que el navegador nos avisa de que no podemos acceder al servidor. ¿Por qué?

El problema es que estamos intentando acceder al contenedor Docker por el puerto 80, pero no lo hemos habilitado en la imagen. Para ello, debemos añadir lo siguiente en nuestro Dockerfile:

# Exponer el puerto 80
EXPOSE 80

Una vez hecho esto, volvemos a generar la imagen:

docker build -t "apache-php72-webserver:1.0" .

Sin embargo, con esto no basta, ya que aunque hagamos el EXPORT del puerto 80 debemos crear el contenedor Docker con el parámetro -p. Este parámetro va a recibir dos puertos separados por :. Por ejemplo, podríamos pasarle el parámetro -p 8080:80, que significa que se va a mapear el puerto 8080 de nuestra máquina local con el puerto 80 del contenedor Docker, del cual hemos hecho el EXPOSE.

Por lo tanto, vamos a crear de nuevo el contenedor:

docker run -d -p 8080:80 --name webserver apache-php72-webserver:1.0

Puede que nos avise de que ya existe un contenedor ejecutándose llamada webserver:

docker: Error response from daemon: Conflict. The container name "/webserver" is already in use by container "7f259b70b735e4d209bbff7196bc76d89c49b62c58f8aad0f73557477231cfab". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

Lo que vamos a hacer es parar ese contenedor y eliminarlo, para poder volver a crear uno con el mismo nombre:

docker kill 7f259
docker rm webserver
docker run -d -p 8080:80 --name webserver apache-php72-webserver:1.0

Ahora, abrimos http://localhost:8080/.