IotEdge - Ошибка при вызове модуля Create image-classifier-service

Я очень новичок в Azure IoT Edge, и я пытаюсь развернуть на своем Raspberry PI: распознавание изображений с помощью Azure IoT Edge и Cognitive Services, но после создания и развертывания решения IoT Edge и его развертывания на одном идентификаторе устройства я не вижу ни одного из этих 2 модуля перечислены в списке Docker PS -a и Iotedge. И при попытке проверить его в журналах EdgeAgent появляется сообщение об ошибке, и кажется, что EdgeAgent получает ошибку при создании этих модулей (служба захвата камеры и классификатор изображений)

Я пробовал: 1. Восстановить его из нового пакета папки 2. Вытащить изображение вручную с портала Azure и запустить изображение вручную с помощью сценария.

Я застрял в этом на несколько дней.

в deployment.arm32v7.json для этих модулей я определяю изображение с зарегистрированным URL-адресом реестра:

"modules": {
          "camera-capture": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "zzzz.azurecr.io/camera-capture-opencv:1.1.12-arm32v7",
              "createOptions": "{\"Env\":[\"Video=0\",\"azureSpeechServicesKey=2f57f2d9f1074faaa0e9484e1f1c08c1\",\"AiEndpoint=http://image-classifier-service:80/image\"],\"HostConfig\":{\"PortBindings\":{\"5678/tcp\":[{\"HostPort\":\"5678\"}]},\"Devices\":[{\"PathOnHost\":\"/dev/video0\",\"PathInContainer\":\"/dev/video0\",\"CgroupPermissions\":\"mrw\"},{\"PathOnHost\":\"/dev/snd\",\"PathInContainer\":\"/dev/snd\",\"CgroupPermissions\":\"mrw\"}]}}"
            }
          },
          "image-classifier-service": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "zzzz.azurecr.io/image-classifier-service:1.1.5-arm32v7",
              "createOptions": "{\"HostConfig\":{\"Binds\":[\"/home/pi/images:/images\"],\"PortBindings\":{\"8000/tcp\":[{\"HostPort\":\"80\"}],\"5679/tcp\":[{\"HostPort\":\"5679\"}]}}}"
            }

Сообщение об ошибке из журналов EdgeAgent:

(Inner Exception #0) Microsoft.Azure.Devices.Edge.Agent.Edgelet.EdgeletCommunicationException- Message:Error calling Create module
image-classifier-service: Could not create module image-classifier-service
        caused by: Could not pull image zzzzz.azurecr.io/image-classifier-service:1.1.5-arm32v7
        caused by: Get https://zzzzz.azurecr.io/v2/image-classifier-service/manifests/1.1.5-arm32v7: unauthorized: authentication required

При попытке запустить извлеченное изображение скриптом:

sudo docker run --rm --name testName -it zzzz.azurecr.io/camera-capture-opencv:1.1.12-arm32v7

Никто

Я получаю такую ​​ошибку:

Camera Capture Azure IoT Edge Module. Press Ctrl-C to exit.
Error: Time:Fri May 24 10:01:09 2019 File:/usr/sdk/src/c/iothub_client/src/iothub_client_core_ll.c Func:retrieve_edge_environment_variabes Line:191 Environment IOTEDGE_AUTHSCHEME not set
Error: Time:Fri May 24 10:01:09 2019 File:/usr/sdk/src/c/iothub_client/src/iothub_client_core_ll.c Func:IoTHubClientCore_LL_CreateFromEnvironment Line:1572 retrieve_edge_environment_variabes failed
Error: Time:Fri May 24 10:01:09 2019 File:/usr/sdk/src/c/iothub_client/src/iothub_client_core.c Func:create_iothub_instance Line:941 Failure creating iothub handle
Unexpected error IoTHubClient.create_from_environment, IoTHubClientResult.ERROR from IoTHub

person Christianto Hermawan    schedule 24.05.2019    source источник
comment
Когда вы вытащили его с помощью docker run, он вытащил, но затем не смог запустить вне предельной среды выполнения, которая ожидается. Но когда пограничный агент попытался вытащить его, это не удалось из-за авторизации. Вы добавили свои учетные данные zzzz.azurecr.io в развертывание?   -  person Damon Barry    schedule 24.05.2019
comment
Как сказал Деймон: у вас есть registryCredentials в вашем deployment.json? docs.microsoft.com/en-us/ лазурный / iot-edge /   -  person silent    schedule 27.05.2019
comment
Привет, Damon & Silent, спасибо за ответ, да, я добавил учетные данные в свое развертывание. Arm32v7.json: registryCredentials: {techlabid: {username: $ {my registry Username}, пароль: $ {my registry Password}, ​​адрес : zzzz.azurecr.io} что-то не так?   -  person Christianto Hermawan    schedule 28.05.2019
comment
Извините, я только что обнаружил, что данные учетные данные реестра неверны по сравнению с указанной ссылкой. Это должно быть прямое значение, например Username: myusername без $ {}. Я перестраиваю и повторно развертываю его, и теперь он работает. спасибо вам, ребята   -  person Christianto Hermawan    schedule 28.05.2019


Ответы (1)


Когда вы вытащили изображение напрямую с помощью docker run, оно вытащило, но затем не смогло работать за пределами пограничной среды выполнения, что и ожидалось. Но когда пограничный агент попытался вытащить его, он потерпел неудачу, потому что он не был авторизован. Среде выполнения не были предоставлены учетные данные, поэтому она попыталась получить доступ к реестру анонимно.

Убедитесь, что вы добавили учетные данные реестра контейнеров в развертывание, чтобы пограничная среда выполнения могла извлекать образы. Развертывание должно содержать что-то вроде следующего в настройках времени выполнения:

"MyRegistry" :{
  "username": "<username>",
  "password": "<password>",
  "address": "<registry-name>.azurecr.io"
}

Как @silent указал в комментариях, документация здесь, включая пример развертывания, включающий учетные данные реестра контейнеров.

person Damon Barry    schedule 28.05.2019