【问题标题】:How to specify --device option for Docker run command?如何为 Docker 运行命令指定 --device 选项?
【发布时间】:2023-03-28 22:13:01
【问题描述】:

我正在测试新的 Azure IoT Edge V2。我需要使用这样的 --device 选项运行部署到边缘设备的 Docker 映像(以访问串行端口):

$ docker run --device=/dev/serial/by-id/usb-ELT_SENSOR_EK100_V1.0_SN000001-if00-port0 olavt.azurecr.io/testco2sensor-arm32

从 Azure 门户创建新部署时如何指定 --device 选项?

【问题讨论】:

    标签: docker azure-iot-hub azure-iot-edge


    【解决方案1】:

    理论上,您可以指定 docker api 容器创建选项中记录的任何内容https://docs.docker.com/engine/api/v1.30/#operation/ContainerCreate

    在设备情况下,您可以(我从未尝试过)在createOptions 中指定:

    {
      "HostConfig": {
        "Devices": [
          {
            "PathOnHost": "/dev/serial/by-id/usb-ELT_SENSOR_EK100_V1.0_SN000001-if00-port0",
            "PathInContainer": "/dev/serial/by-id/usb-ELT_SENSOR_EK100_V1.0_SN000001-if00-port0",
            "CgroupPermissions": "rwm"
          }
        ]
      }
    }
    

    确保容器特权完全开放硬件方面的所有内容是可行的。为此,您只需使用Privileged 参数。请注意,Privileged 中只有一个 d。

    {
      "HostConfig": {
        "Privileged": true
      }
    }
    

    【讨论】:

    • 我收到此设备错误:“500 - 发生一个或多个错误。(Docker API 响应状态码=InternalServerError, response={"message":"OCI 运行时创建失败:设备访问at 8 字段不能为空:未知“})”。有更详细的日志吗?
    • 我假设它在 raspbian 上运行,对吧?你运行的是什么版本的 docker?
    • 我今天刚试了一下,发现 Azure 门户设置 createOptions 是不稳定的,不知何故它没有存储您在设置模块时指定的值。作为一种解决方法(因为这仍然是预览版),我建议您使用部署脚本来更新部署清单。这是您可以使用的github repository。这应该可以解决问题
    • 您的原始答案部分正确。如果将 "CgroupPermissions": "rwm" 添加到 JSON 中,它可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多