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 $somemgtport
es diferente de 15672
No 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 -p
indicador correctamente porque curl https://localhost:$somemgtport
funciona 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 run
comando?
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=55001
y somemgtport=65002
):
tcp6 0 0 :::55001 :::* LISTEN 29613/docker-proxy
tcp6 0 0 :::65002 :::* LISTEN 29622/docker-proxy
netstat -pln | grep 15672
no 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.