当前位置: 首页 > 知识库问答 >
问题:

无法将Python程序从Azure IOT Edge部署到Rasberry Pi

龙学
2023-03-14

我使用以下链接安装了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
并且能够将temSensor映像部署到我的Rasberry Pi

我决定部署自己的程序“blink.py”
我使用下面的命令在本地Rasberry Pi中创建了该程序并运行良好:

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

我按照以下步骤从Azure IOT边缘门户部署了自己的程序:
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”
我看到IoEdge运行时试图将此映像部署为容器,但失败了
当我尝试使用命令查看日志时

>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中放置任何东西吗?

-桑迪

共有2个答案

戚星腾
2023-03-14

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

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

重新部署后...成功了,万岁!!!!

海翼
2023-03-14

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

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

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

此主题在stackoverflow中作为参考。

 类似资料:
  • 我无法让我的Spring Boot站点在Azure Web实例上响应。我遵循了Java应用程序说明和上传说明。IIS服务器似乎正在接收请求,但战争中的servlet没有响应。根据留档,有几个问题。特别是,web.config应该部署到www root,并指定java路径和转发端口。我相信我已经涵盖了这些基础——我的web.config贴在下面。 我确实尝试过从市场上部署tomcat服务器,效果很好

  • 嘿,我已经尝试了几天了,我已经遍历了文档,我遵循了教程,当我试图将react应用程序部署到github页面时,我无法通过npm运行部署。我将npm称为运行构建,我将正确的url放置到package.json作为“主页”,我再次调用它并获得“部署”和“预部署”,我在节点模块中肯定有gh-pages,我的意思是我得到了所有我遵循的每一个步骤,每个教程都可以告诉我。我遇到了一个问题,内容如下: 错误:无

  • 我正在尝试向EB部署一个测试应用程序。我遇到了一个问题。我遵循了本教程:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-linux-core-tutorial.html 当我上传测试应用程序时,它无法启动/var/log/eb引擎。日志说 2022/02/07 21:59:18.585543[ERROR]执行命令[app部

  • 我有一个从另一个开发人员那里继承的应用程序,我对Java不太了解。这款应用程序几分钟前还能正常工作,但现在我得到了以下错误: 无法将JDBC驱动程序部署到C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.41\lib\jtds-1.2.jar。检查您是否具有对C:\Program Files\Apache Software

  • 我有一个应用程序,其中有以下模块ct-ejb(ejb)ct-rest(war)ct-web(war)ct-ear(ear) 我正在尝试构建一个EAR文件,并将其部署到intellij中的JBOSS应用服务器。我的申请。xml如下所示。我从ct那里得到的。ear模块- 问题是,我在将ear部署到服务器时遇到异常。它清楚地表明“未找到模块文件ct-web.war…”但ct网络。目标文件夹中存在war。

  • 问题内容: 我正在尝试在Heroku上使用Flask开发我的第一个“大型”应用程序,并尝试将此处的基本教程与以下说明结合:https : //devcenter.heroku.com/articles/python与以下说明:http:// flask.pocoo.org/docs/patterns/packages/#larger- applications。它在本地与“先行启动”一起工作,但是