У меня есть клиент, работающий в контейнере docker, который подписывается на брокера MQTT и затем записывает данные в базу данных. Для подключения к MQTT Broker мне потребуется настроить переадресацию портов.
При разработке клиента на моей локальной машине все работало нормально:
SSH -L <mqtt-port:1883>:localhost:<9000> <user>@<ip-of-server-running-broker>
Затем клиент настраивается для подписки на брокер MQTT через localhost: 9000. Все это прекрасно работает на моей локальной машине.
В контейнере это не будет, если я не запусту контейнер с --net=host
, но я бы предпочел этого не делать из-за проблем безопасности.
I попробовал следующее:
- Создать docker сеть "testNetwork"
- Запустить контейнер ssh_tunnel внутри "testNetwork" и реализовать переадресацию портов внутри этого контейнера.
- Запустите контейнер database_client в "testNetwork" и подпишитесь на брокер mqtt через мостовую сеть, например ("ssh_tunnel.testNetwork:")
(я хочу 2 отдельных контейнера для этого потому что IP-адрес придется менять довольно часто, и я не хочу постоянно перестраивать клиентский контейнер)
Но все мои попытки пока не увенчались успехом. Пересылка, кажется, работает (я могу получить доступ к оболочке на сервере в контейнере s sh), но я не нашел способа фактически подписаться на брокер mqtt из контейнера клиента.
Возможно на самом деле это довольно просто, и я просто не понимаю, как это работает, но я уже несколько часов застрял в этой проблеме ... Любая помощь или советы приветствуются!