0

I installed the IOT Edge runtime using below link:
https://learn.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-linux-arm

I am following the below tutorial to deploy a docker image to IOT Edge (Rasberry Pi):
https://learn.microsoft.com/en-us/azure/iot-edge/quickstart-linux
and able to deploy the tempSensor image to my Rasberry Pi

I decided to deploy my own program "blink.py".
I created the program and its working fine in the local Rasberry Pi using below command:

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

I followed the below steps to deploy my own program from Azure IOT Edge portal:
1.) Create a docker image using Dockerfile:

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

then ran the command:

$docker build -t "blink" ./

2.) Now i pushed the image to Azure container Registry. Followed below steps:

a.) Login to Azure container registry

$docker login blink.azurecr.io

b.) Push to Azure container registry

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

3.) Deploy image in Azure container registry to IOT Edge device using below link: https://learn.microsoft.com/en-us/azure/iot-edge/quickstart-linux#deploy-a-module

I see a container image created in the Raspberry Pi as "blink.azurecr.io/blink"
I see that IOTEdge runtime tried to deploy this image as container but it failed.
When i try to see the logs using command

>docker logs blink


It shows an error:

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!



Seems like some access issue but not sure how to solve it? Do i need to put anything in the createOptions while deploying the edge module from azure portal ?

-Sandy

Sandy
  • 79
  • 2
  • 8

2 Answers2

0

From the error log, it seems that the module has no permission to access device/gpio. sudo should be able to used inside the container. You can try to add the following command in Dockerfile.

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

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

This topic in stackoverflow as a reference.

Michael Xu
  • 4,382
  • 1
  • 8
  • 16
0

ok so it worked! I provided below in the createOptions:

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

After re-deploying.. it worked, Hurray !!!!

Sandy
  • 79
  • 2
  • 8