【问题标题】:Connecting to BACNET Server on Host Machine Using Client Container使用客户端容器连接到主机上的 BACNET 服务器
【发布时间】:2018-09-25 04:25:22
【问题描述】:

我正在尝试连接已容器化的 BACNET 客户端和在主机上运行的 BACNET 服务器。我在带有 Linux 容器的 Windows 10(主机)上使用 Docker for Windows。 我尝试了以下方法:

一个。使用 run 命令发布客户端容器的端口 47808。

b.运行network=host的容器,访问localhost的服务。

c。尝试使用运行命令将网关 IP 指定为服务器的 IP 地址。

d。在与我的服务器相同的子网中运行容器

e。使用指定的主机 IP 和发布的端口运行容器。 我的 bacnet 服务器,取自 https://sourceforge.net/projects/bacnet/ 总是连接到 DockerNAT,10.0.75.1?知道为什么会这样吗?服务器应用程序不是一个容器,而是一个可执行文件。

服务器 IP:10.0.75.1 (dockerNAT) 在主机上运行的客户端容器。

【问题讨论】:

  • 您介意重新阐述您的问题到底是什么吗?这是一个 bacnet 问题还是一个码头问题。很确定没有多少人知道bacnet 到底是什么,所以最好保持简单。
  • @SamuelToh 这更像是一个码头问题。我已经公开并发布了 47808 udp 端口​​,但似乎无法与我的主机上运行的 BACnet(楼宇自动化和控制网络)协议服务器建立连接。
  • 我尝试从容器内访问主机上运行的其他服务(apache、sql),反之亦然,即在主机网络上运行我的容器/发布端口。注意:(这是客户端从容器内执行以查找服务器的广播查询)
  • 你把容器的端口映射到主机了吗?如果是这样,您应该能够执行localhost:1234 之类的操作,其中 1234 是端口号。
  • 我已将容器的端口 47808 映射到主机的端口。我运行的 docker 命令是: docker run -it --network=host --rm -p 47808:47808/udp --name=bacnetclient bacnetclient:14Sept /bin/bash。

标签: docker linux-containers bacnet


【解决方案1】:

来自快速谷歌:

对于 Windows 容器,不使用此组件,并且容器和 它们的端口只能通过 NATed IP 地址访问。

对于 BACnet,这会让您陷入痛苦的世界。您必须在容器中使用具有 NAT 支持的 BACnet BBMD 来实现此目的,并且您的 BACnet 客户端必须注册为 BACnet 外部设备。 SourceForge 的 BACnet 堆栈似乎确实有一些 NAT 支持(代码似乎在那里,但我从未测试过它的原始形式)。

因此,您所看到的是“预期的”,但您的解决方案将要求您比以往任何时候都更加熟悉 BACnet BBMD。仔细阅读 BACnet 规范。祝你好运。

【讨论】:

  • 感谢@Edward 的反馈。我熟悉 BBMD 和 FD,但我相信当我在两个 IP 网/子网之间进行通信时应该使用 BBMD,因为 IP 路由器不支持广播。是因为我正在尝试通过 docker network-host 网络进行通信,而 DockertNAT 充当了这两个网络的桥接器吗?所以,公平地说,对于我的 bacnet 堆栈,我在两个不同的 IP 网络之间进行通信,因此需要 BBMD?
  • 我不是 docker 用户,所以我只是在这一点上推测。但就需要 BBMD 而言,一旦您使用 NAT,就需要一个 NAT-aware() BBMD(它将公共 IP 地址插入 BACnet BVLL 标头,以便客户端清楚返回路径。 ) () NAT 是 BBMD 的可选服务,大部分不支持 NAT,但正如我所说,SourceForge 堆栈确实有​​相关的代码行....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2015-11-19
  • 1970-01-01
相关资源
最近更新 更多