如何让 Azure IoT 边缘模块执行 http 请求?

How to allow Azure IoT edge modules to execute http requests?

运行ning curl -m 20 https://www.google.com 有效,但是当 运行 来自边缘模块容器时超时:

docker exec myModule sh -c 'curl -m 20 https://www.google.com'

curl: (28) Operation timed out after 20000 milliseconds with 0 out of 0 bytes received

我们在多个 VM 上拥有相同的边缘环境 运行,它按预期工作。它return一个结果。我假设防火墙规则或其他设置阻止了请求?所以我比较了两个 VM 之间 sudo iptables -L -v 的结果,这些是相似的。

对于导致此行为的原因有什么建议吗?或者我错过了什么?

我们发现了问题。请求超时的设备有两个网络:以太网和 GSM 调制解调器。 Docker 被桥接到没有互联网连接的以太网网络。它必须是 GSM 调制解调器。我们通过 运行 和 azure-iot-edge network as "host" network 解决了这个问题。所以它使用与主机相同的配置。

"createOptions": {
  "NetworkingConfig": {
    "EndpointsConfig": {
      "host": {}
    }
  },
  "HostConfig": {
    "NetworkMode": "host"
  }
}

运行 作为主机网络解决了大多数机器上的问题。在其他一些机器上,我们遇到了另一个异常,即:

System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (00000005, 0xFFFDFFFF): Name or service                                                                        not known

这与 /etc/hosts/etc/hostname 之间的不匹配有关,请参阅此 issue 来修复它。