我有一個基於
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 內容。
問題
When$somemgtport
不同於15672
我無法從外界存取它(透過HTTP 的rabbitmq 管理介面)。
但看來我-p
正確使用了該標誌,因為curl https://localhost:$somemgtport
它按預期工作(以及 amqp 對 $someport 的調用)。
運行時,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(實現連接埠重定向),自從問題發布以來,網路層至少被重寫了兩次。