Mapeo de puertos Docker / interconexión de contenedores
Uno, mapeo de puertos
1. Concepto
- La asignación de puertos de Docker consiste en asignar el puerto de servicio de la aplicación en el contenedor a la máquina host local.
2. Implementación
Mapeo aleatorio
- Al usar el parámetro -P, Docker asignará aleatoriamente un puerto al puerto de red abierto del contenedor interno y abrirá un servicio nginx de la siguiente manera
$ docker run -d -P nginx
e93349d539119dc48dc841e117f6388d6afa6a6065b75a5b4aedaf5fb2a051fc
$
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e93349d53911 nginx "nginx -g 'daemon ..." 11 seconds ago Up 9 seconds 0.0.0.0:32769->80/tcp zen_kirch
- En este momento, use docker ps para ver que el puerto 32769 del host local está asignado al puerto 80 del contenedor. En este momento, cuando navegamos a través del host local y visitamos http: // localhost: 32769, el nginx aparecerá la página.
Especificar mapeo de puertos
- Al usar el parámetro -p, puede especificar el puerto que se asignará y solo se puede vincular un contenedor a un puerto específico.
- Los formatos admitidos son:
IP: HostPort: ContainerPort
IP: ContainerPort
HostPort: ContainerPort - Iniciemos un servicio nginx y mapeemos el puerto local 8080 al puerto 80 del contenedor
$ docker run -d -p 8080:80 nginx
23e725098712d061a1382f33d6fe54da23ae37597a62f8debdd3731b5f9cc4b9
$
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23e725098712 nginx "nginx -g 'daemon ..." 8 seconds ago Up 6 seconds 0.0.0.0:8080->80/tcp frosty_ptolemy
- En este momento, use docker ps para ver que el puerto 8080 del host local está asignado al puerto 80 del contenedor. En este momento, cuando visitemos http: // localhost: 8080 a través del navegador local, aparecerá la página de bienvenida de nginx .
3. Ver el puerto asignado
- Utilice el comando del puerto de la ventana acoplable para ver la configuración del puerto actualmente mapeado y también puede ver la dirección vinculada. El formato del comando es el siguiente:
docker port CONTAINER [PRIVATE_PORT[/PROTO]]
- El contenedor tiene su propia red interna y dirección IP. Puede usar Docker Inspect + ID de contenedor para obtener información específica sobre el contenedor.
4.Docker agrega un puerto mapeado al contenedor en ejecución
método uno
Obtener la IP del contenedor
docker inspect `container_name` | grep IPAddress //将container_name 换成实际环境中的容器名
puerto de reenvío de iptables
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
//将容器的8000端口映射到docker主机的8001端口
Método dos
Envíe un contenedor en ejecución como imagen
docker commit containerid foo/live
Ejecute el espejo y agregue el puerto
docker run -d -p 8000:80 foo/live /bin/bash
Segundo, interconexión de contenedores
- Cree y ejecute el contenedor llamado web1, y el número de puerto se asigna automáticamente
docker run -itd -P --name web1 centos /bin/bash
- Cree y ejecute el dominio de contenedor web2, enlace a web1 y comuníquese con él
docker run -itd -P --name web2 --link web1:web1 centos /bin/bash
- Ingrese el ping del contenedor web2 web1