Docker错误:无法访问/dev/mem。尝试以root用户身份运行
我有一个覆盆子圆周率和我安装了码头工人在它。我制作了一个python脚本来读取其中的gpio状态。所以当我运行下面的命令时Docker错误:无法访问/dev/mem。尝试以root用户身份运行,docker,docker-compose,Docker,Docker Compose,我有一个覆盆子圆周率和我安装了码头工人在它。我制作了一个python脚本来读取其中的gpio状态。所以当我运行下面的命令时 sudo docker run -it --device /dev/gpiomem app-image 它运行良好,并显示gpio状态。现在我已经创建了一个docker compose.yml文件,因为我想将这个app.py部署到我创建的swarm集群中 下面是docker compose.yml的内容 version: "3" services: app:
sudo docker run -it --device /dev/gpiomem app-image
它运行良好,并显示gpio状态。现在我已经创建了一个docker compose.yml
文件,因为我想将这个app.py
部署到我创建的swarm集群中
下面是docker compose.yml的内容
version: "3"
services:
app:
image: app-image
deploy:
mode: global
restart: always
privileged: true
当我使用sudo-docker-stack-deploy
命令启动部署时,映像已部署,但出现错误:
No access to /dev/mem. Try running as root
所以它说它没有访问/dev/mem
的权限,但是当我使用设备时,这很奇怪,为什么服务没有访问权限。它还说尝试以root运行,我认为所有容器都已经在root中了。我还尝试通过在代码中包含命令chmod 777/dev/gpiomem
来授予该文件的完全权限,但它仍然显示此错误
我的主要问题是,当它使用docker run..
命令正常运行时,为什么在使用sudo docker stack deploy
部署时,它在docker compose
文件中显示错误。?如何解决这个问题
如中所述,谢谢
注意:在swarm模式下部署堆栈时,此选项将被忽略
一个(版本3)合成文件
swarm中忽略了设备选项。您可以使用privileged:true
访问所有设备。swarm模式不支持添加设备、功能和使用特权模式。yml文件中的这些选项用于使用docker compose
而不是docker stack deploy
。您可以在中跟踪将这些功能添加到swarm模式的进度
由于您只需访问一个设备,因此您可能会幸运地将该设备的文件添加为卷,但这只是一个偶然的机会:
volumes:
- /dev/gpiomem:/dev/gpiomem
我还可以使用哪些其他选项?@user2727您可以使用用户特权选项。非常感谢。因此,我只需要添加privileged:true
,它就可以访问dev/gpiomem
,假设我还需要/dev/ttyusb0
。它也将可用。我在docker comose文件中添加了privileged:true
选项,但仍然显示相同的错误。我已经编辑了问题中的docker撰写内容。请看一看。当您运行您的容器add--privileged时,您的容器可以访问所有设备,例如:docker run-it--rm--privileged container名称:containertag/bin/bashNo。它似乎不适用于这种方法。@user2727我的回答中说不支持这种方法的部分对您不起作用?我试图指定/dev/gpiomem
,因为卷
不起作用。?