Docker は iptables でポートを開きます (rabbitmq)

Docker は iptables でポートを開きます (rabbitmq)
  • をベースにした Docker イメージを持っていますrabbitmq

  • 私の Dockerfile にはポートに関する指定が何もありません。

  • 次のようにインスタンスを実行して、通常の rabbitmq ポート (5671、5672、15672) をカスタム ポートにバインドします。

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

  • 私の iptables INPUT チェーンには何もなく、FORWARD チェーンには通常の docker のものが入っています。

問題

外部から(HTTP 経由の rabbitmq 管理インターフェースに)アクセスできない場合$somemgtportと異なります。15672

-pしかし、期待どおりに動作するため、フラグを正しく使用したようですcurl https://localhost:$somemgtport($someport への amqp 呼び出しも同様です)。

実行中、iptables DOCKER チェーンは次のようになります。

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

したがって、ポート $someport と $somemgtport は開かれず、コンテナの「内部」に対応するポート 5671 と 15672 (rabbitmq からのポート) が開かれます。

=> 私には、予想とはまったく逆のことをしているように思えます...!

コマンドで何を間違えたのでしょうかdocker run?

注意: 同じマシン上で 2 つの rabbitmq インスタンスを実行しているため、デフォルトのポート以外のポートが必要です。


netstat -pln更新 - 以下は(および を使用someport=55001)の部分的な出力ですsomemgtport=65002

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

netstat -pln | grep 15672出力がない

答え1

廃止通知: この質問は古くなっています。当時この質問を作成したものはもう存在しません。Docker はずっと前に iptables (ポート リダイレクトを実現するため) の使用を中止しており、この質問が投稿されてから少なくとも 2 回、ネットワーク層は最初から書き直されています。

関連情報