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"
我正在尝试在 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"