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 内容。

问题

$somemgtport不同于15672我无法从外界访问它(通过 HTTP 的 rabbitmq 管理接口)时。

但看来我-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(以实现端口重定向),自问题发布以来,网络层至少被重写了两次。

相关内容