【发布时间】:2020-05-24 21:15:08
【问题描述】:
我在 Edge 模块中托管的 linux 虚拟机上有一个服务器。我想访问我的主机(Windows)上的服务器,但据我所知,Edge 模块的 IP 地址是我的 Linux VM 的本地主机。
如何更改 Edge 模块的 IP 地址分配,使其占用我的 linux 虚拟机的 IP 地址而不是本地主机 (172...)?
【问题讨论】:
标签: linux azure docker azure-iot-edge
我在 Edge 模块中托管的 linux 虚拟机上有一个服务器。我想访问我的主机(Windows)上的服务器,但据我所知,Edge 模块的 IP 地址是我的 Linux VM 的本地主机。
如何更改 Edge 模块的 IP 地址分配,使其占用我的 linux 虚拟机的 IP 地址而不是本地主机 (172...)?
【问题讨论】:
标签: linux azure docker azure-iot-edge
如果我正确理解您的问题,您想从另一台计算机访问在 Edge 模块内运行的服务器。所以服务器监听的端口也得暴露在宿主机上吧?
如果是这样,有比更改 IoT Edge 网络更好的方法。通过“端口映射”,您可以从容器/模块中获取一个端口,并对其进行“映射”,使其在主机级别公开,因此您的另一台机器可以只使用主机的 IP 和服务器的端口进行连接.
例如,假设您在模块中运行的“服务器”是侦听端口 80 的 Web 服务器。如果要将端口 80 上的侦听器公开给主机,您可以执行以下操作在模块的“容器创建选项”中...
{
"PortBindings": {
"80/tcp": [
{
"HostPort": "80"
}
]
}
}
}
这将在端口 80 上侦听到 主机 的传入流量,然后将该流量转发到端口 80 上的模块。如果需要,您甚至可以将“主机端口”更改为其他值到(例如,侦听端口 8081,然后“转发”到模块中的端口 80)。
有一点需要注意,如果您需要使用端口 443、8883 或 5671,默认情况下,IoT Edge 本身已经映射了这些端口。有办法解决这个问题。如果您需要,请告诉我。
【讨论】:
请参阅我在此处发布的问题Azure IoT Edge API module cannot be accessed。
对于正在努力解决这种情况的任何人,您应该通过在 deployment.template.json 的createOptions 部分添加ExposedPorts 来公开在来宾VM 上运行的边缘模块容器,如下所示。并且VM的IPv4地址也应该与相关端口一起使用。
"modules": {
"test_flask_api": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "${MODULES.test_flask_api}",
"createOptions": {
"ExposedPorts": {
"5000/tcp": {}
},
"HostConfig": {
"PortBindings": {
"5000/tcp": [
{
"HostPort": "5000"
}
]
}
}
}
}
}
}
【讨论】: