Raspberry PI / IOTEdge не удается получить из реестра Azure Container - PullRequest
0 голосов
/ 31 января 2019

У меня есть устройство IOTEdge (Rapi3), а IotEdgeHub и IotEdgeagent развернуты и работают.

Я успешно создал и развернул образы ( пример пользовательского видения ) в ACR и настроил ключи доступа на портале.Я добавил соответствующие учетные данные в мой файл .env.

deployment.json был развернут с использованием Create deployment for single device.

В журналах IotAgent я вижу серию 500 ошибок:

Выполнение команды дляоперация ["создать"] не удалась.Microsoft.Azure.Devices.Edge.Agent.Edgelet.EdgeletCommunicationException- Сообщение: ошибка вызова Создать модуль захвата камеры: Не удалось создать модуль захвата камеры, вызванный: Не удалось получить изображение myregistryname.azurecr.io/azurev1/cameracapture:0.2.7-arm32v7 вызвано: Get https://myregistryname.azurecr.io/v2/azurev1/cameracapture/manifests/0.2.7-arm32v7: не авторизован: требуется аутентификация, StatusCode: 500

Я уже запустил sudo docker login -u myregistryname -p accesskeypassword1 myregistryname.azurecr.io/azurev1 успешно

Я могу запустить sudo docker pull myregistryname.azurecr.io/azurev1/cameracapture:0.2.7-arm32v7вручную, который успешно загрузил соответствующее изображение.

Может показаться, что IotEdgeHub и / или IotEdgeAgent не имеют одинакового доступа к ACR.Как я могу повысить привилегии.


Обновление ;Мой файл deployment.template.json выглядит следующим образом:

{
  "moduleContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.0",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registryName": {
                "username": "$CONTAINER_REGISTRY_USERNAME",
                "password": "$CONTAINER_REGISTRY_PASSWORD",
                "address": "$CONTAINER_REGISTRY_ADDRESS"
              }
            }
          }
        },
        "systemModules": {
          "edgeAgent": {
            "type": "docker",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-agent:1.0",
              "createOptions": ""
            }
          },
          "edgeHub": {
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-hub:1.0",
              "createOptions": ""
            },
            "env": {
                "OptimizeForPerformance": {
                  "value": "false"
                }
            }
          }
        },
        "modules": {
          "camera-capture": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "env": {
              "VIDEO_PATH": {"value": 0},
              "IMAGE_PROCESSING_ENDPOINT":  {"value": "http://image-classifier-service:80/image"},
              "RESIZE_WIDTH":  {"value": 256},
              "RESIZE_HEIGHT":  {"value": 256},
              "SHOW_VIDEO":  {"value": "True"}
            },
            "settings": {
              "image": "${MODULES.CameraCapture.arm32v7}",
              "createOptions": {
                "HostConfig": {
                  "PortBindings": {
                    "5012/tcp": [ { "HostPort":"5012"}]
                  },
                  "Binds": ["/dev/video0:/dev/video0"],
                  "Devices":[{"PathOnHost":"/dev/video0","PathInContainer":"/dev/video0","CgroupPermissions":"mrw"}]
                }
              }
            }
          },
          "sensehat-display": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "env": {
              "THRESHOLD": {"value": 0.6}
            },
            "settings": {
              "image": "${MODULES.SenseHatDisplay.arm32v7}",
              "createOptions": {
                "HostConfig":{
                  "Binds":["/dev/i2c1:/dev/i2c1"],
                  "Privileged":true
                }
              }
            }
          },
          "image-classifier-service": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "${MODULES.ImageClassifierService.arm32v7}",
              "createOptions": ""
            }
          }
        }
      }
    },
    "$edgeHub": {
      "properties.desired": {
        "schemaVersion": "1.0",
        "routes": {
          "CameraCaptureToSenseHatDisplay": "FROM /messages/modules/camera-capture/outputs/output1 INTO BrokeredEndpoint(\"/modules/sensehat-display/inputs/input1\")",
          "CameraCaptureToIoTHub": "FROM /messages/modules/camera-capture/outputs/output1 INTO $upstream",
          "CameraCaptureGAToIoTHub": "FROM /messages/modules/CameraCaptureGA/outputs/* INTO $upstream"
        },
        "storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }
    }
  }
}

Настройки, отображаемые на портале: enter image description here

1 Ответ

0 голосов
/ 31 января 2019

deployment.json, отправляемое на устройство, должно выглядеть следующим образом (если вы используете учетные данные администратора ACR, а не рекомендуемый принцип обслуживания ):

"registryCredentials": {
    "registryName": {
        "username": "myregistryname",
        "password": "xxxxxxxxxxxxxxxxxxx",
        "address": "myregistryname.azurecr.io"
     }
 }

Можетвы подтверждаете, что ваш deploy.json выглядит так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...