Клиент Azure IoT не подключается к Центру Интернета вещей

Я сталкиваюсь с этими ошибками в моем модуле Invoke. У меня есть два модуля, которые запускают скрипт Python. Один модуль для получения вызванного облачного сообщения, а другой — для получения вызванного облачного сообщения через ввод. Все работало нормально, и вдруг я получаю:

К вашему сведению: скрипт python с моими обновленными изменениями работает нормально, когда я фиксирую изменения после входа в контейнер (в котором есть моя ранее успешно собранная и развернутая версия модуля), но когда я развертываю модуль через развертывание, манифестирует его сбой с этими ошибками .

Connected with result code 0
transport.connect raised error
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/azure/iot/device/common/mqtt_transport.py", line 383, in connect
    host=self._hostname, port=8883, keepalive=DEFAULT_KEEPALIVE
  File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 937, in connect
    return self.reconnect()
  File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 1071, in reconnect
    sock = self._create_socket_connection()
  File "/usr/local/lib/python3.7/site-packages/paho/mqtt/client.py", line 3522, in _create_socket_connection
    return socket.create_connection(addr, source_address=source, timeout=self._keepalive)
  File "/usr/local/lib/python3.7/socket.py", line 707, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "/usr/local/lib/python3.7/socket.py", line 752, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/azure/iot/device/common/pipeline/pipeline_stages_mqtt.py", line 168, in _run_op
    self.transport.connect(password=self.sas_token)
  File "/usr/local/lib/python3.7/site-packages/azure/iot/device/common/mqtt_transport.py", line 405, in connect
    raise exceptions.ConnectionFailedError(cause=e)
azure.iot.device.common.transport_exceptions.ConnectionFailedError: ConnectionFailedError(None) caused by gaierror(-2, 'Name or service not known')

ConnectOperation: completing with error ConnectionFailedError(None) caused by gaierror(-2, 'Name or service not known')
ConnectionLockStage(ConnectOperation): op failed.  Unblocking queue with error: ConnectionFailedError(None) caused by gaierror(-2, 'Name or service not known')
ConnectOperation: completing with error ConnectionFailedError(None) caused by gaierror(-2, 'Name or service not known')
Callback completed with error ConnectionFailedError(None) caused by gaierror(-2, 'Name or service not known')
["azure.iot.device.common.transport_exceptions.ConnectionFailedError: ConnectionFailedError(None) caused by gaierror(-2, 'Name or service not known')\n"]
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/azure/iot/device/common/mqtt_transport.py", line 383, in connect
    host=self._hostname, port=8883, keepalive=DEFAULT_KEEPALIVE 

Я использую azure-iot-device = 2.1.1.

Пожалуйста, помогите мне с предложением решить эту проблему.


person Nishad Nazar    schedule 06.07.2020    source источник


Ответы (2)


Я столкнулся с подобной проблемой, и я решил ее, используя следующее. Пожалуйста, проверьте, упомянули ли вы

NetworkMode = Хосты в вашем deployment.json

Если да, то удалите его, и он будет работать нормально

person vishruti    schedule 07.07.2020

Беглый просмотр стека предполагает, что у вас может быть проблема с DNS. Похоже, невозможно разрешить имя хоста. Это то, что пытается сделать getaddrinfo. Вы не указываете, какой это тип устройства, но если у вас есть возможность проверки связи, попробуйте использовать ее для проверки связи с центром Интернета вещей. Он не будет отвечать на пинг, но сообщит вам, смог ли он разрешить имя.

person Mark Radbourne    schedule 07.07.2020
comment
Марк, учитывая, что имя моего устройства XXXXXds01, я не использую это имя хоста нигде в своем сценарии, но я использую IP-адрес хоста в сценарии. Это работало, и вдруг это появилось сейчас. Как я могу пропинговать свой Центр Интернета вещей, чтобы разрешить имя? - person Nishad Nazar; 07.07.2020
comment
Вы используете IP-адрес своего центра Интернета вещей в своем скрипте? Если да, то не надо. IP-адреса концентраторов не обязательно являются постоянными и могут меняться. Вы должны подключаться к ‹your_hub_name›.azure-devices.net. Чтобы пропинговать его, используйте ping ‹your_hub_name›.azure-devices.net. Используете ли вы пакет SDK клиента Azure IoT для устройства MS python? - person Mark Radbourne; 09.07.2020
comment
Привет, Марк, спасибо за все ваши предложения, обязательно попробую и это. Я исправил это через ответ @vishruti. Это было очень глупо. - person Nishad Nazar; 09.07.2020