Docker错误:无法访问/dev/mem。尝试以root用户身份运行

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:

我有一个覆盆子圆周率和我安装了码头工人在它。我制作了一个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:
        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
,因为
不起作用。?