Estou tendo uma imagem docker baseada em
rabbitmq
.Nada no meu Dockerfile especifica nada sobre portas.
Eu vinculo as portas normais do RabbitMQ (5671, 5672 e 15672) às minhas portas personalizadas executando minha instância da seguinte maneira:
docker run -d -p $someport:5671 -p 127.0.0.1::5672 -p $somemgtport:15672 myimage
Não há nada na minha cadeia INPUT do iptables, e a cadeia FORWARD é preenchida com o material usual do docker.
O problema
Quando $somemgtport
é diferente de 15672
não consigo acessá-lo (a interface de gerenciamento RabbitMQ via HTTP) do mundo externo.
Mas parece que usei o -p
sinalizador corretamente porque curl https://localhost:$somemgtport
funciona conforme o esperado (assim como as chamadas amqp para $someport).
Durante a execução, a cadeia DOCKER do iptables é a seguinte:
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
Portanto ele não abre as portas $someport e $somemgtport mas sim as portas que correspondem ao "interior" do container: 5671 e 15672 (as do RabbitMQ).
=> parece-me que está a fazer exactamente o contrário do que eu esperaria...!
O que eu fiz de errado com o docker run
comando?
NB: Quero outras portas além das padrão porque estou executando 2 instâncias do RabbitMQ na mesma máquina.
Atualização - Aqui está uma saída parcial de netstat -pln
(with someport=55001
and somemgtport=65002
):
tcp6 0 0 :::55001 :::* LISTEN 29613/docker-proxy
tcp6 0 0 :::65002 :::* LISTEN 29622/docker-proxy
netstat -pln | grep 15672
não tem saída
Responder1
Aviso de descontinuação: Essa pergunta está ultrapassada, o que quer que a tenha criado na época não existe mais. O Docker parou de usar iptables (para conseguir o redirecionamento de porta) há muito tempo, a camada de rede foi reescrita do zero pelo menos duas vezes desde que a pergunta foi postada.