0

我使用以下链接安装了 IOT Edge 运行时:
https ://docs.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-linux-arm

我正在按照以下教程将 docker 映像部署到 IOT Edge (Rasberry Pi):
https
: //docs.microsoft.com/en-us/azure/iot-edge/quickstart-linux 并能够将 tempSensor 映像部署到我的树莓派

我决定部署我自己的程序“blink.py”。
我使用以下命令在本地 Rasberry Pi 中创建了该程序及其工作正常:

$docker container run --device /dev/gpiomem -d blink

我按照以下步骤从 Azure IOT Edge 门户部署我自己的程序:
1.) 使用 Dockerfile 创建一个 docker 映像:

FROM arm32v7/python:2.7.15-stretch
COPY blink.py
CMD ["python","./blink.py"]

然后运行命令:

$docker build -t "blink" ./

2.) 现在我将图像推送到 Azure 容器注册表。遵循以下步骤:

a.) 登录 Azure 容器注册表

$docker login blink.azurecr.io

b.) 推送到 Azure 容器注册表

$docker tag blink link.azurecr.io/blink
$docker push blink.azurecr.io/blink

3.) 使用以下链接将 Azure 容器注册表中的映像部署到 IOT Edge 设备: https ://docs.microsoft.com/en-us/azure/iot-edge/quickstart-linux#deploy-a-module

我看到在 Raspberry Pi 中创建的容器映像为“blink.azurecr.io/blink”。
我看到 IOTEdge 运行时尝试将此映像部署为容器,但失败了。
当我尝试使用命令查看日志时

>docker logs blink


它显示一个错误:

Traceback (most recent call last):
  File "./blink.py", line 6, in <module>
    GPIO.setup(4,GPIO.OUT) 
RuntimeError: No access to /dev/mem. Try running as root!



似乎是一些访问问题,但不知道如何解决?从 azure 门户部署边缘模块时,我是否需要在 createOptions 中添加任何内容?

-沙

4

2 回答 2

0

从错误日志来看,模块似乎没有访问设备/gpio的权限。sudo应该能够在容器内使用。您可以尝试在 Dockerfile 中添加以下命令。

RUN apt-get update && apt-get -y install sudo

RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

这个话题在stackoverflow中作为参考。

于 2018-08-10T08:42:35.617 回答
0

好的,所以它起作用了!我在 createOptions 中提供了以下内容:

{
    "HostConfig": {
        "Devices": [
            {
                "PathOnHost": "/dev/gpiomem",
                "PathInContainer": "/dev/gpiomem",
                "CgroupPermissions": "rwm"
            }
        ]
    }
}

重新部署后..它奏效了,万岁!!!!

于 2018-08-10T18:45:59.490 回答