我有一个覆盆子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
文件中显示错误。如何解决这个问题。?
由于
答案 0 :(得分:0)
注意:在群集模式下部署堆栈时,将忽略此选项 a(版本3)撰写文件。
在swarm中忽略devices选项。您可以使用privileged: true
来访问所有设备。
答案 1 :(得分:0)
群集模式不支持添加设备,功能和使用特权模式。 yml文件中的这些选项用于使用docker-compose
而不是docker stack deploy
。您可以在github issue #24862中跟踪将这些功能添加到群组模式的进度。
由于你需要做的只是访问一个设备,你可能很幸运将该设备的文件添加为一个卷,但这是一个黑暗的镜头:
volumes:
- /dev/gpiomem:/dev/gpiomem