Home Assistant и Node Red установленные в Docker не видят MQTT брокер

Добрый день!

После установки HA и Node red через Docker Compose по инструкции:
ни Node red ни HA не подключаются к MQTT брокеру.
В Node red при создании сервера прописываю локальный адрес WB с портом 1883
2024-07-08_19-57-59
После деплоя ноды и обновления списка устройств самих устройств не появляется.

В HA так же после конфигурации брокера выдает ошибку подключения
2024-07-08_20-03-50, 2024-07-08_20-06-37

Когда я устанавливал HA и Node red через apt, все работало нормально, однако поскольку докер - изолированная среда, сейчас не могу понять куда двигаться.

Может нужно отдельный mqtt сервер mosquitto в докере устанавливать и затем объединять мостом с localhost, или каким то образом порты в docker-compose.yaml прописать для HA и node red?

Подскажите пожалуйста что делать?

Прикрепите ваш файл настройки docker compose

docker-compose.yaml (1,8 КБ)

На всякий случай скрин network из portainer, может тут что нибудь полезное

И кстати в этой теме foxymadon сталкивался с этой проблемой, попросил его подробнее описать решение.

Я сильно не вглядывался, но мне кажется, что проблема в том, что вышеуказанные контейнеры крутятся в изолированном сегменте “smarthome”, для доступности из вне контейнера необходимо просто указать порты которые вы пробрасываете. И так во всех ваших контейнерах указана подсеть не имеющая доступа “наружу” к mqtt который стоит на контроллере, может быть поможет прокинуть в вашем случае порт 1883 дополнительно к портам 9000 , и т.д в каждом из контейнеров, но почему вы добавили этот параметр networks в свой конф

    ports:
      - "9000:9000/tcp"
      - "9443:9443/tcp"
    environment:
      - TZ=Europe/Moscow
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer/data:/data
    networks:
      - smarthome

В таком виде разве не работает без приписки про networks? Мне кажется проблема в этом , попробуй удалить строки про networks из каждого контейнера и поднять их заново командой docker compose up -d. На примере контейнера portainer

    ports:
      - "9000:9000/tcp"
      - "9443:9443/tcp"
    environment:
      - TZ=Europe/Moscow
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer/data:/data

В моем network list все выглядит вот как

Но опять же я ставил по

по инструкции:

а у вас есть некоторые дополнения к ней, видимо :grinning:

1 лайк

Добрый день.
Выложите пожалуйста планируемое взаимодействие контейнеров с хостом по сети.
Ну вот для начала - каким образом сеть 172.17.0.0/16 маршрутизируется в 172.19.0.0/16? Кому приндлележат их шлюзы?

У меня сразу после установки по инструкции, НА не видел MQTT брокер, поэтому стал смотреть разные доки и примеры и пробовать разные способы решить эту проблему прежде чем открывать тему.
Сейчас убрал networks из docker compose, перезапустил контейнеры - все тоже самое, ошибка подключения

После перезапуска контейнеров они все теперь в сети 172.18.0.0 как у Ильи выше


Но у Ильи все работает, а у меня не хочет.
Может ли быть это связанно с настройками mosquitto как у Влада в этой теме?

Подскажите пробовали ли вы подключиться к вашему брокеру через MQTT explorer перед тем как делать шаги по дальнейшей конфигурации контейнеров?

Возможно в настройках интеграции MQTT HA вы вводите не полные данные (логин/пароль например) для подключения к MQTT брокеру

Нет, не пробовал, сегодня на объекте попробую подключиться.
Хотя с логином и паролем, прописанным для доступа к вэб интерфейсу через ngnix тоже пробовал.

Логин от брокера MQTT и логин от WEB интерфейса это разные вещи, пробуйте подключиться с актуальными учетными данными через MQTT explorer (для начала), если получится с этими же учетными данными для подключения пробуйте настроить все остальное

1 лайк

У Влада ошибка как раз была связана с установкой пароля на вэб интерфейс, но так или иначе сегодня попробую через explorer подключиться к брокеру

Возник вопрос, а не может ли быть эта ошибка связана со сменой SSH порта 22 на другой? Т.е. я на WB поменял ssh порт

Что за ошибка? С какого адреса к которому подключаетесь? Пингуется ли целевой адрес (брокера) с исходного?
Ну ии проще всего - с помощью mosquitto_sub подключиться для проверки, пожалуй.

Home assistant установленный в docker не видит брокер mqtt

В общем сегодня пытался подключится к mqtt брокеру через MQTT explorer. По протоколу mqtt и порт 1883 подключится не смог.
2024-07-11_19-20-50

Однако по websockets и порт 18883 подключился

2024-07-11_19-22-08

Может ли это действительно быть связанно с установкой пароля на веб интерфейс через ngnix?
B что собственно нужно делать в этом случае? Каким либо образом исправить файл 10listeners.conf?

Проблема решилась!
Изначально был установлен пароль на веб интерфейс по этой инструкции
После того, как я убрал адрес 127.0.0.1 в 10listeners.conf в строке listener 1883 и перезапустил mosquito, Node Red и Home Assistant сразу увидели mqtt брокер!

Илья, во первых спасибо вам большое за инструкцию, данный способ установки очень сильно облегчает работу!
И большая просьба, если возможно, допишите к ней пожалуйста решение данной проблемы, т.к. многие устанавливаю пароль на веб интерфейс, думаю это многим поможет не скакать на граблях.

То есть разрешили анонимный доступ откуда угодно? Учитывайте это. Я бы как минимум защитил установкой пароля.

Пароль остался, но как сделать чтобы и у приложений в докере был доступ, и чтобы не было возможности зайти откуда угодно?

Пароль на mqtt? Если да - и пароль достаточно сложный то все в порядке.