创建 Docker 容器并链接到尚不存在的硬件设备

创建 Docker 容器并链接到尚不存在的硬件设备

我的用例:

我使用容器化的 octoprint 实例来驱动 3dprinter。我遇到的问题是,如果在容器启动过程中未连接打印机(usb),则它根本无法启动。当未连接时,Docker compose 无法找到 usb 设备,从而导致容器无法启动。

问题是,当打印机不主动打印时,它会被物理关闭,而每次容器需要重新启动时都打开打印机并不是一个可行的解决方案。有没有办法(在 docker compose land 中)在设备不可用时启动容器,然后在设备可用时链接它?或者检查设备是否存在,如果不存在,则在没有设备的情况下启动。我使用的主机操作系统是 raspberry pi OS。

我现在配置的方式是这样的:

version: '3'
services:
  octoprint:
    container_name:octoprint
    image: "octoprint/octoprint"
    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"
    network_mode:host
    restart: unless-stopped

我想不出任何办法来做到这一点。

我唯一能想到的就是创建一个在创建 /dev/ttyUSB0 时触发的脚本,然后将其添加到已经运行的容器中。但这似乎是最坏的解决方案。我想在 docker/docker compose 框架内解决这个问题。

另一个“解决方案”是每次通过 homeassistant 集成打开打印机时自动重新启动容器。这也是我想避免的最坏情况解决方案。

另外,我不太确定我是否应该将此发布到 stackexchange 的“超级用户”分支或 unix/devops 分支。如果我应该将此发布到其他地方,请纠正我。

答案1

作为一种解决方法,您可以使用特权模式并将整个/dev目录挂载到您的容器:

privileged: true
    devices:
      - '/dev:/dev'

来源

相关内容