IotEdge - 调用创建模块图像分类器服务时出错
IotEdge - Error calling Create module image-classifier-service
我是 Azure IoT Edge 的新手,我正在尝试部署到我的 Raspberry PI:使用 Azure IoT Edge 和认知服务进行图像识别
但是在构建并推送 IoT Edge 解决方案并将其部署到单个设备 ID 之后,我看到 Docker PS -a & Iotedge 列表中列出的那两个模块中的 none
当尝试在 EdgeAgent 日志上检查它时,出现错误消息,并且 EdgeAgent 在创建这些模块(相机捕获和图像分类器服务)时似乎出错
我试过:
1.从新的文件夹包中重新构建它
2. 从 Azure 门户手动拉取镜像,运行 通过脚本手动拉取镜像
我坚持了好几天。
部署中。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
None
我收到这个错误:
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
当您直接使用 docker run
拉取图像时,它拉取但随后未能 运行 超出边缘 运行 时间,这是预期的。但是当边缘代理试图拉取它时,它失败了,因为它没有被授权。 运行时间未提供凭据,因此它试图匿名访问注册表。
确保将容器注册表凭据添加到部署中,以便 edge 运行time 可以拉取图像。部署应在 运行 时间设置中包含如下内容:
"MyRegistry" :{
"username": "<username>",
"password": "<password>",
"address": "<registry-name>.azurecr.io"
}
正如@silent 在评论中指出的那样,文档是 here,包括一个包含容器注册表凭证的示例部署。
我是 Azure IoT Edge 的新手,我正在尝试部署到我的 Raspberry PI:使用 Azure IoT Edge 和认知服务进行图像识别 但是在构建并推送 IoT Edge 解决方案并将其部署到单个设备 ID 之后,我看到 Docker PS -a & Iotedge 列表中列出的那两个模块中的 none 当尝试在 EdgeAgent 日志上检查它时,出现错误消息,并且 EdgeAgent 在创建这些模块(相机捕获和图像分类器服务)时似乎出错
我试过: 1.从新的文件夹包中重新构建它 2. 从 Azure 门户手动拉取镜像,运行 通过脚本手动拉取镜像
我坚持了好几天。
部署中。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
None
我收到这个错误:
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
当您直接使用 docker run
拉取图像时,它拉取但随后未能 运行 超出边缘 运行 时间,这是预期的。但是当边缘代理试图拉取它时,它失败了,因为它没有被授权。 运行时间未提供凭据,因此它试图匿名访问注册表。
确保将容器注册表凭据添加到部署中,以便 edge 运行time 可以拉取图像。部署应在 运行 时间设置中包含如下内容:
"MyRegistry" :{
"username": "<username>",
"password": "<password>",
"address": "<registry-name>.azurecr.io"
}
正如@silent 在评论中指出的那样,文档是 here,包括一个包含容器注册表凭证的示例部署。