docker 容器内的 I2C

I2C inside a docker container

我正在尝试在 docker 容器内的 raspberry pi 上使用 i2c 引脚。我使用 运行 安装我所有的模块,但是当我使用 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

如果我 运行 在我的 raspberry pi 上而不是在我的容器中它工作正常。但是当我关闭我的 raspberry pi 上的 i2c 引脚时,它在 运行 上给了我同样的错误。所以我知道这与我的 i2c 引脚被激活有关。有谁知道如何解决这个问题?

作为一项安全预防措施,默认情况下系统设备不会在 Docker 个容器内公开。您可以使用 docker run--device 选项将 特定 设备暴露给您的容器,如:

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

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

docker run --privileged myimage

这会将所有 /dev 暴露给您的容器,并删除其他限制(例如,您将能够更改容器中的网络配置并安装新的文件系统)。

您应该在 docker-compose 中使用以下内容(使用 docker-compose 规范的 v3 测试):

devices:  
  - "/dev/i2c-1:/dev/i2c-1"