Docker abre puertos en iptables (rabbitmq)

Docker abre puertos en iptables (rabbitmq)
  • Tengo una imagen acoplable basada en rabbitmq.

  • Nada en mi Dockerfile especifica nada sobre los puertos.

  • Vinculo los puertos habituales de RabbitMQ (5671, 5672 y 15672) a mis puertos personalizados ejecutando mi instancia de la siguiente manera:

    docker run -d -p $someport:5671 -p 127.0.0.1::5672 -p $somemgtport:15672 myimage

  • No hay nada en mi cadena INPUT de iptables y la cadena FORWARD está llena del material habitual de Docker.

El problema

Cuando $somemgtportes diferente de 15672No puedo acceder a ella (la interfaz de administración de RabbitMQ a través de HTTP) desde el mundo exterior.

Pero parece que usé el -pindicador correctamente porque curl https://localhost:$somemgtportfunciona como se esperaba (al igual que las llamadas amqp a $someport).

Al ejecutarse, la cadena DOCKER de iptables es la siguiente:

Chain DOCKER (1 references)
 target     prot opt in     out     source               destination
 ACCEPT     tcp  --  !docker0 docker0  anywhere             xyz  tcp dpt:15672
 ACCEPT     tcp  --  !docker0 docker0  anywhere             xyz  tcp dpt:5671
 ACCEPT     tcp  --  !docker0 docker0  anywhere             xyz  tcp dpt:amqp

Entonces no abre los puertos $someport y $somemgtport sino los puertos que corresponden al "interior" del contenedor: 5671 y 15672 (los de Rabbitmq).

=> ¡Me parece que está haciendo exactamente lo contrario de lo que esperaría...!

¿Qué hice mal con el docker runcomando?

NB: Quiero otros puertos además de los predeterminados porque estoy ejecutando 2 instancias de Rabbitmq en la misma máquina.


Actualización: aquí hay un resultado parcial de netstat -pln(con someport=55001y somemgtport=65002):

tcp6       0      0 :::55001                :::*                    LISTEN      29613/docker-proxy
tcp6       0      0 :::65002                :::*                    LISTEN      29622/docker-proxy

netstat -pln | grep 15672no tiene salida

Respuesta1

Aviso de obsolescencia: Esa pregunta está desactualizada, lo que sea que la haya creado en ese momento ya no existe. Docker dejó de usar iptables (para lograr la redirección de puertos) hace mucho tiempo, la capa de red se reescribió desde cero al menos dos veces desde que se publicó la pregunta.

información relacionada