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

时间:2018-01-25 11:25:25

标签: docker docker-compose

我有一个覆盆子pi,我已经安装了码头工人。我已经制作了一个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,但是当我使用device时,这是非常奇怪的,为什么服务没有访问权限。它还说尝试以root身份运行,我认为所有容器都已经在root中。我还尝试通过在代码中包含命令chmod 777 /dev/gpiomem来授予该文件的完全权限,但它仍然显示此错误。

我的主要问题是,当它使用docker run..命令正常运行时,为什么在使用docker-compose进行部署时,sudo docker stack deploy文件中显示错误。如何解决这个问题。?

由于

2 个答案:

答案 0 :(得分:0)

docker-compose devices

中所述
  

注意:在群集模式下部署堆栈时,将忽略此选项   a(版本3)撰写文件。

在swarm中忽略devices选项。您可以使用privileged: true来访问所有设备。

答案 1 :(得分:0)

群集模式不支持添加设备,功能和使用特权模式。 yml文件中的这些选项用于使用docker-compose而不是docker stack deploy。您可以在github issue #24862中跟踪将这些功能添加到群组模式的进度。

由于你需要做的只是访问一个设备,你可能很幸运将该设备的文件添加为一个卷,但这是一个黑暗的镜头:

volumes:
- /dev/gpiomem:/dev/gpiomem