gpt4 book ai didi

python - 使用用户权限和 USB 设备启动 Docker 容器

转载 作者:太空宇宙 更新时间:2023-11-03 23:13:36 26 4
gpt4 key购买 nike

我创建了一个非常简单的脚本,可以使用 USB 相机在 Raspberry Pi (RPi) 上拍照。

为了帮助在多个 RPi 上进行部署,我想使用 Docker。

有时我制作的图像完全符合我的要求:我每 T 次拍摄一张照片,然后保存在我启动容器时挂载的主机分区上。 (顺便说一句,它使用 Python 和 OpenCV 。)

我想在我的主计算机上发送这些图片,所以我希望这些图片获得我用来登录 RPi 的用户的许可。

所以当我创建容器时,我使用这样的东西:

docker run -d --name container_name \
-v /home/user/images:/home/images \
-u $(id -u):$(id -g) \
--device /dev/video0 \
image_name

它确实创建了具有用户权限的目录和文件,但是我不能再读取 USB 摄像头了。

如果我删除 -u 参数,我可以读取相机,但文件/目录是作为 root 创建的,这会导致之后检索图像时出现问题。

我首先尝试制作一个 swarm(以便更轻松地更新图像),但是我在使用它的设备时遇到了困难。

最佳答案

您是否检查了设备所需的访问权限?它们通常可供团体访问。使用 -u 运行只会将您的用户设置为 id -g 返回的组。

我还访问设备并从仅限开发的容器创建文件,并通过在容器内创建专用用户(包括访问设备所需的组)解决了这个问题。

以下是我如何在 Dockerfile 中为我的开发容器创建此用户:

# Create a non-root user with the same uid as on the host to allow proper file
# permissions created from the container in volumes. Since it is not root, allow
# calling sudo without password when required.
ARG uid
RUN useradd -M --uid $uid --user-group user --groups uucp \
&& echo 'user ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/user \
&& echo 'Defaults exempt_group+=user' >> /etc/sudoers.d/user \
&& chmod a=r,o= /etc/sudoers.d/user
USER user

这些 dockerfile 指令创建一个非根用户,拥有自己的用户组,并将其包含在 uucp 组中以访问 Debian 中的 TTY 设备。用户 ID 作为 Docker 构建参数传递(指令 ARG uid,加上 Docker 构建选项 --build-arg uid=$(id -u))。然后我将它添加为没有密码的 sudoer(主要是为了有时能够运行包管理命令并尝试一些事情)。

关于python - 使用用户权限和 USB 设备启动 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com