Docker öffnet Ports in iptables (rabbitmq)

Docker öffnet Ports in iptables (rabbitmq)
  • Ich habe ein Docker-Image basierend auf rabbitmq.

  • In meiner Docker-Datei sind keine Angaben zu Ports enthalten.

  • Ich binde die üblichen RabbitMQ-Ports (5671, 5672 und 15672) an meine benutzerdefinierten Ports, indem ich meine Instanz wie folgt ausführe:

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

  • In meiner iptables-INPUT-Kette befindet sich nichts, und die FORWARD-Kette ist mit dem üblichen Docker-Zeug gefüllt.

Das Problem

Wann $somemgtportist der Unterschied, dass 15672ich von der Außenwelt nicht darauf zugreifen kann (auf die RabbitMQ-Verwaltungsschnittstelle über HTTP).

Aber es scheint, dass ich das -pFlag richtig verwendet habe, da curl https://localhost:$somemgtportes wie erwartet funktioniert (ebenso wie die amqp-Aufrufe an $someport).

Während der Ausführung sieht die DOCKER-Kette von iptables wie folgt aus:

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

Es öffnet also nicht die Ports $someport und $somemgtport, sondern die Ports, die dem „Inneren“ des Containers entsprechen: 5671 und 15672 (die von rabbitmq).

=> es scheint mir, dass es genau das Gegenteil von dem bewirkt, was ich erwarten würde …!

Was habe ich bei dem Befehl falsch gemacht docker run?

NB: Ich möchte andere Ports als die Standardports, da ich zwei Instanzen von rabbitmq auf derselben Maschine ausführe.


Update – Hier ist eine Teilausgabe von netstat -pln(mit someport=55001und somemgtport=65002):

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

netstat -pln | grep 15672hat keinen Ausgang

Antwort1

Veralteter Hinweis: Diese Frage ist veraltet. Was auch immer sie damals erstellt haben mag, existiert nicht mehr. Docker hat schon vor langer Zeit aufgehört, iptables zu verwenden (um eine Portumleitung zu erreichen). Die Netzwerkschicht wurde seit der Veröffentlichung der Frage mindestens zweimal von Grund auf neu geschrieben.

verwandte Informationen