在Docker容器内使用I2C

9

我想在Docker容器内使用树莓派上的i2c引脚。我通过RUN安装了所有模块,但当我使用CMD运行Python程序时,会出现错误:

Trackback (most recent call last):
file "test.py", line 124, in <module>
bus = smbus.SMBus(1)
IOError: [Errno 2] No such file or directory

如果我在树莓派上运行而不是在容器中运行,它可以正常工作。但是当我关闭树莓派上的i2c引脚时,在运行它时会出现相同的错误。因此,我知道这与我的i2c引脚有关。是否有人知道如何解决这个问题?

2个回答

15

作为一项安全预防措施,默认情况下,Docker 容器内部不会公开系统设备。您可以使用 --device 选项向容器中公开 特定 设备,例如:

docker run --device /dev/i2c-0 --device /dev/i2c-1 myimage

使用--privileged标志可以删除所有限制:

docker run --privileged myimage

这将会将所有的/dev暴露给你的容器,并移除其他限制(例如,你可以在容器中更改网络配置和挂载新文件系统)。


有关docker-compose的任何想法吗? - dmigo
Docker Compose 提供了对几乎所有 docker run 选项的支持。请参阅文档获取与 --device 相当的选项。 - larsks

3
你应该在docker-compose中使用以下内容(已测试与docker-compose规范v3兼容):
devices:  
  - "/dev/i2c-1:/dev/i2c-1"  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接