У меня есть образ докера на основе rabbitmq
.
В моем Dockerfile ничего не говорится о портах.
Я привязываю обычные порты rabbitmq (5671, 5672 и 15672) к своим пользовательским портам, запустив свой экземпляр следующим образом:
docker run -d -p $someport:5671 -p 127.0.0.1::5672 -p $somemgtport:15672 myimage
В моей цепочке INPUT iptables ничего нет, а цепочка FORWARD заполнена обычным докером.
когда $somemgtport
отличается от 15672
Я не могу получить к нему доступ (интерфейс управления rabbitmq через HTTP) из внешнего мира.
Но похоже, что я использовал -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
команда?
NB: Мне нужны другие порты, кроме портов по умолчанию, потому что я запускаю 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
не имеет выхода
Уведомление об устаревании: Этот вопрос устарел, того, что могло его создать в то время, больше не существует. Docker давно перестал использовать iptables (для перенаправления портов), сетевой уровень переписывался с нуля как минимум дважды с момента публикации вопроса.