我在linux vm上有一台服务器,它托管在Edge模块中。我想访问我的主机(Windows)上的服务器,但据我所知,Edge modules的ip地址是我的Linux VM的本地主机。
如何更改边缘模块的ip地址分配,使其采用我的linux虚拟机的ip地址,而不是本地主机的ip地址(172...)?
发布于 2020-05-29 05:43:28
如果我正确理解了您的问题,您希望从另一台计算机访问在Edge模块内部运行的服务器。因此,服务器正在侦听的端口必须在主机上公开,对吧?
如果是这样,有一种比更改IoT边缘网络更好的方法。通过‘端口映射’,你可以从你的容器/模块中获取一个公开的端口,并‘映射’它,这样它就可以在主机级公开,因此你的另一台机器可以只使用主机的IP和你的服务器的端口来连接。
例如,假设您在模块中运行的“服务器”是侦听端口80的web服务器。如果您想要将端口80上侦听器暴露给主机,您可以在模块的"Container Create Options“中执行如下操作...
{
"PortBindings": {
"80/tcp": [
{
"HostPort": "80"
}
]
}
}
}它将侦听到达端口80上的主机的传入流量,然后将该流量转发到端口80上的模块。如果你愿意,你甚至可以将“主机端口”更改为其他端口(例如,监听端口8081,然后“转发”到模块中的端口80 )。
需要注意的一件事是,如果您需要使用端口443、8883或5671,默认情况下,这些端口已经由IoT边缘本身映射。有一种方法可以解决这个问题。如果你需要的话,请告诉我。
发布于 2021-07-24 21:45:38
请参考我在这里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"
}
]
}
}
}
}
}
}https://stackoverflow.com/questions/61992520
复制相似问题