【问题标题】:Docker Access to Raspberry Pi GPIO Pins --privileged does not workDocker Access to Raspberry Pi GPIO Pins --privileged 不起作用
【发布时间】:2021-06-04 14:20:21
【问题描述】:

我知道类似的问题had already been answered,我努力学习。 我相信,我已经尝试了几乎所有可能的组合,但都没有成功:

sudo docker run --device /dev/ttyAMA0:/dev/ttyAMA0 --device /dev/mem:/dev/mem --device /dev/gpiomem:/dev/gpiomem --privileged my_image_name /bin/bash

我也参考了the docker manual 并尝试了 --cap-add=SYS_ADMIN

sudo docker run --cap-add=SYS_ADMIN --device /dev/ttyAMA0:/dev/ttyAMA0 --device /dev/mem:/dev/mem --device /dev/gpiomem:/dev/gpiomem --privileged my_image_name /bin/bash

我还尝试了与卷的组合:-v /sys:/sys

但由于权限被拒绝,我仍然无法访问设备:

我已经检查了这些可能需要的设备是否存在并且我可以阅读它们:

我被浪费了。我还在做错什么?是不是我必须以 root 身份在容器内运行我的应用程序?世界上怎么了? :D

【问题讨论】:

    标签: linux docker linux-device-driver gpio permission-denied


    【解决方案1】:

    您以 appuser 身份在容器中运行命令,而设备文件由具有各种组权限且无世界访问权限的 root 拥有(crw-rw---crw-r-----)。这些组可能看起来不正常,因为容器内的/etc/groups 与主机不匹配,并且传递到容器的是 uid/gid,而不是用户/组名。该应用程序本身似乎期望您以 root 身份运行,甚至建议使用 sudo。该 sudo 不在 docker 命令本身上(尽管如果主机上的用户不是 docker 组的成员,您可能需要它),而是在容器内启动的进程上:

    docker run --user root --privileged my_image_name /bin/bash
    

    意识到这是非常不安全的,因此请确保您信任容器内的进程,就好像它在容器外的主机上以 root 身份运行一样,因为它具有所有相同的访问权限。

    【讨论】:

    • 突破!答对了 !特别感谢您的透彻分析。有道理:)
    • 再次感谢!虽然我是容器中应用程序的作者,但我也可以使用更受限制的安全设置来运行它:docker run --user root --device /dev/gpiomem:/dev/gpiomem the_image_name_or_id
    猜你喜欢
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多