【问题标题】:Sending messages to Azure IoT Hub from within Windows docker container从 Windows docker 容器中向 Azure IoT Hub 发送消息
【发布时间】:2020-08-13 19:52:50
【问题描述】:

我对 Docker 很陌生,我必须构建一个容器,该容器可以运行 Python 脚本,该脚本使用 CSV 文件的行定期向 Azure IoT 中心发送消息。我已经使用 Linux 构建了这个容器,但是由于我的资源限制,我必须使用 Windows 容器重新构建映像。这是我尝试使用的 Dockerfile 的设置:

FROM mcr.microsoft.com/windows/servercore:1809

# Install pip requirements
ADD requirements.txt .
RUN python -m pip install -r requirements.txt

WORKDIR /app 
ADD SimulatedDeviceFitbit.py .

WORKDIR /app 
COPY sensor_original2.csv .

CMD ["python", "SimulatedDeviceFitbit.py"]

使用 Pip 添加的唯一包是 azure-iot-device 库。 CSV 用于读取将作为消息发送的数据,脚本处理消息的发送。每当我运行图像时,错误:

azure.iot.device.common.transport_exceptions.TlsExchangeAuthError: TlsExchangeAuthError(None) caused by SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)')

脚本中与 IoT 中心的连接如下所示:

client = IoTHubDeviceClient.create_from_connection_string(CONNECTION_STRING)

我通过 Docker 检查了我的网络设备,没有发现任何问题,但显然我遗漏了一些东西。我没有在容器中联网的经验,希望得到任何指导。

【问题讨论】:

    标签: python azure docker azure-iot-hub


    【解决方案1】:

    我认为您的容器映像缺少 Baltimore Root CA。

    当您使用Windows Server Core Container Image 时,您可能需要启用一些WindowsFeatures 才能使用certutil 将证书导入证书存储。

    您的 DockerFile 应该包含如下内容:

    # Copy PFX file (located on HOST on C:\test) to container and install
    ADD "c:\test\BaltimoreRootCA.pfx" "c:\test\BaltimoreRootCA.pfx"
    RUN certutil -importpfx "c:\test\BaltimoreRootCA.pfx"
    

    您可以从 Windows 机器导出 Baltimore Root CA 或从 Azure IoT SDK C Github Repo 复制它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      相关资源
      最近更新 更多