如何解决从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复制它
-
还请参考此仓库,其中包含有关如何启用Windows功能和导入证书的一些步骤:https://github.com/fabioharams/container
-
以及在此相关SO线程上导入证书的替代方法:Docker SSL Cert for windows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。