Port Mapping
El port mapping o mapeo de puertos le permite a las aplicaciones del sistema anfitrión comunicarse con los contenedores mediante conexiones IP.
Funciona de manera similar a un proxy reverso: los clientes hacen una petición a la IP del gestor de contenedores y éste redirige el tráfico a alguno de los contenedores en actividad en base al puerto usado.
Por ejemplo, si el cliente y los contenedores
corren en el mismo equipo
la petición se hace al localhost
:
Más sobre las IPs y sus conceptos relacionados: ver anexo
Sintaxis
A cada contenedor que necesite ser accedido desde el exterior
se le configura el parámetro ports
asignando los números de los puertos de a pares:
services:
servicio_ip:
image: imagen-servicio
ports:
- puerto_host:puerto_contenedor
Un mismo contenedor puede tener varios puertos mapeados hacia el host.
El protocolo usado por el puerto puede ser especificado de manera opcional:
services:
servicio_ip:
image: imagen-servicio
ports:
- puerto_host:puerto_contenedor/protocolo
donde las elecciones disponibles son tcp
y udp
.
Véase el anexo sobre TCP y UDP para más información.
Ejemplo
Supóngase por ejemplo el despliegue de una base de datos. En este ejemplo se eligió un gestor de bases de datos PostgreSQL, el cual por default acepta conexiones al puerto 5432. Para que el contenedor pueda ser consultado se eligió arbitrariamente el puerto 9999 y además se necesita configurar algunos parámetros como el nombre de usuario, el nombre de la base de datos a crear y una contraseña para el acceso, lo que se hace con variables de entorno predefinidas.
name: database_container
services:
base_datos:
image: postgres:17.2-bookworm
ports:
- 9999:5432
# otras configuraciones
restart: always
volumes:
- /var/lib/postgresql/data
environment:
POSTGRES_USER: noname
POSTGRES_PASSWORD: 123456
POSTGRES_DB: test-red
Más sobre las imágenes de PostgreSQL: DockerHub