我有我正在try 编写的软件,需要连接到OPC-UA服务器.该软件被托管在一个 docker 集装箱内,而OPC-UA服务器最终将嵌入到我公司使用的PLC中.目前,我try 使用在我的Windows PC上本地运行的Prosys OPC-UA模拟服务器.我使用的是最新版本的Docker Desktop,打开了WSL2模式(而不是使用Hyper-V).这是一个.NET应用程序(.NET 6),它使用OPCFoundation.NetStandard.Opc.Ua Nuget包来处理与UA服务器的通信.我还可以确认.NET UA库读取的XML配置文件位于软件预期的位置(EXE的根目录).
在docker环境之外运行时,我可以使用连接字符串opc.tcp://<my_windows_ip>:53530/OPCUA/SimulationServer
很好地连接到Prosys UA服务器.一旦我创建了一个docker映像,创建了一个容器,并try 连接到服务器,它就失败了.我试过了
- 主机名为Host.docker.Internal
- Linux 172.17.0.1地址(应该是主机PC的地址)
- Prosys连接字符串原样
- opc.tcp://<;fully_qualified_computer_name>;:53530/OPCUA/SimulationServer
- 127.0.0.1(我以为它无论如何都不会起作用)
- try 在
docker-compose.yml
文件中进行不同的端口映射 - 连接到具有嵌入式UA服务器的实际PLC
每一次try 都失败了.我试图通过编写一个在我的电脑上本地运行的非常简单的TCP Listener应用程序来排除OPC,并添加了一个指向docker中包含的应用程序的ASP.NET路由,该应用程序通过TCP向未在docker中运行的应用程序发送消息.我让它听0.0.0.0:13000
,我的应用程序是由一个连接到它的 docker 容器托管的,很好.
我做这件事已经快一个星期了,我不知道下一步该怎么办.令我惊讶的是,我无法连接到一个有自己的服务器的真正的PLC.