我有一个 IOTEdge 设备 (Rapi3),IotEdgeHub 和 IotEdgeagent 已部署并运行。
我已成功构建并将图像(自定义视觉示例)部署到 ACR,并在门户中配置了访问密钥。我已将相应的凭据添加到我的.env
文件中。
已deployment.json
使用Create deployment for single device
.
在 IotAgent 日志中,我可以看到一系列500
错误:
执行操作 ["create"] 的命令失败。Microsoft.Azure.Devices.Edge.Agent.Edgelet.EdgeletCommunicationException-消息:调用创建模块相机捕获时出错:无法创建模块相机捕获,原因是:无法提取图像 myregistryname.azurecr.io/azurev1/cameracapture:0.2。 7-arm32v7 由以下原因引起:获取 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
}
}
}
}
}