我目前具有 Azure 认知服务(语音转文本(作为 docker 容器的公共预览版访问权限。 这允许容器在 IoT Edge 设备上运行,而不是访问云来执行此服务。 此公共预览版附带安装说明,显示我可以下载其中一个容器的现有 docker 映像,并使用"docker run"从 CLI 运行它。
但我不想在 IoT Edge 设备上手动运行 docker 容器。 我希望它自动部署到我的 IoT Edge 设备并自动开始运行。 为了做到这一点,我认为它需要作为物联网边缘模块存在。 我的理解正确吗?
所以我的问题更像是一个指导性问题。 是否需要创建自己的 IoT Edge 模块来利用此 ACS docker 容器,或者是否有其他方法可以将其自动部署到我的 IoT Edge 设备并使其自动开始运行?
我无法在线找到将现有 docker 容器部署到 IoT Edge 设备的任何文档或示例。 任何指导将不胜感激!
好的,经过大量挖掘,我找到了解决方案。 无论你做什么,都不要在网上搜索"从docker容器创建物联网模块"或任何完全有意义的东西。 相反,我必须搜索非常特定于 Azure 认知服务在 docker 运行时接受的 EULA 的内容(即,我必须搜索"IoT Edge 模块 docker \"eula\"(。请注意 eula 两边的引号,以确保它在搜索结果中。 我遇到了这篇文章。
使用本文的指导,我将详细重复我在这里所做的工作,以防链接过时。
- 在 VS Code 中,创建新的 IoT 边缘解决方案
- 在解决方案中,添加新的 IoT Edge 模块 一个。当系统提示输入要创建的模块类型时,选择"选择现有模块(输入完整 URL(">
- 如果您查看 deployment.template.json 文件,您现在将看到添加到 edgeAgent 详细信息中的"注册表凭据"的新元素。 相应地填写地址、用户名和密码。
- 如果尚未执行此操作,请联机创建认知服务资源以获取终结点 URL 和 ApiKey。 记下这些值。
-
在 deployment.template.json 文件中,在新模块的配置设置下,添加以下内容。
"settings": { "image": "containerpreview.azurecr.io/microsoft/cognitive-services-speech-to-text:latest", "createOptions": { "Cmd": [ "Eula=accept", "Billing={enter-your-EndpointURL}", "ApiKey={enter-your-ApiKey}" ], "HostConfig": { "PortBindings": { "5000/tcp": [ { "HostPort": "5000" } ] } } }
这相当于使用如下参数从命令行运行"docker run":
docker run --rm -it -p 5000:5000 --memory 4g --cpus 1
containerpreview.azurecr.io/microsoft/cognitive-services-recognize-text
Eula=accept
Billing={BILLING_ENDPOINT_URI}
ApiKey={BILLING_KEY}
- 现在"生成并推送 IoT Edge 解决方案",后跟"为单个设备创建部署"。 在目标 IoT Edge 设备上,现在应会看到通过 CLI"iotedge 列表"安装并运行的模块。
更新日期: 2020/05/01
在向 MSFT 提交更好的文档请求后,他们更新了他们的文档站点,以包含有关如何修改 deployment.template.json 文件以匹配 docker 命令行参数的信息:https://learn.microsoft.com/en-us/azure/iot-edge/how-to-use-create-options
这是上面链接(https://learn.microsoft.com/en-us/azure/iot-edge/how-to-use-create-options(的精髓:
一旦你让模块按照你想要的方式工作(即:在 Docker 容器(,运行 docker检查。此命令 以 JSON 格式输出模块详细信息。查找以下参数: 已配置并复制 JSON。