从Windows docker容器中向Azure IoT Hub发送消息

问题描述

我对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检查了我的网络设备,没有看到任何问题,但是显然我缺少了一些东西。我没有使用容器进行联网的经验,希望能获得任何指导。

解决方法

我相信您的容器映像缺少巴尔的摩根CA。

在使用Windows Server Core Container Image时,您可能需要启用某些WindowsFeature才能使用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计算机导出巴尔的摩根CA或从Azure IoT SDK C Github Repo复制它

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...