У меня есть устройство 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
}
}
}
}
}
Настройки, отображаемые на портале: