我有一个基于rabbitmq 。
我的Dockerfile中没有任何指定端口的东西。
我通过运行我的实例绑定通常rabbitmq端口(5671,5672和15672)到我的自定义端口,如下所示:
docker run -d -p $someport:5671 -p 127.0.0.1::5672 -p $somemgtport:15672 myimage
在我的iptablesinput链中没有任何东西,FORWARD链中充满了通常的docker工具。
当$somemgtport与15672不15672我无法从15672访问它(通过HTTP的rabbitmqpipe理界面)。
但是,似乎我正确地使用了-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 netstat -pln | grep 15672没有输出
弃用声明 :这个问题已经过时了,不pipe什么时候创build它现在都不存在了。 自从问题发布以来,Docker停止使用iptables(实现端口redirect)很久以前,networking层被重写了至less两次。