连接到容器内的 OPC UA 服务器 运行
Connect to an OPC UA server running inside a container
我已经对一个简单的 OPC UA 服务器进行了 docker 化。当我在本地 运行 时,我能够毫无问题地连接到服务器。但是,当我 运行 服务器在 Docker 容器中时,客户端拒绝连接。此外,当我尝试将服务器端点设置为 opc.tcp://localhost:4840 时,服务器在容器内 运行 时不会绑定到该地址。必须使用端点 opc.tcp://127.0.0.1:4840。当 运行 在本地连接服务器时,这不是问题。以下库用于实现服务器 https://github.com/FreeOpcUa/python-opcua and the client used is https://github.com/FreeOpcUa/opcua-client-gui.
我试过设置不同的端点,但没有成功。
服务器实现是:
from opcua import Server, ua
server = Server()
server.set_endpoint('opc.tcp://127.0.0.1:4840')
server.set_security_policy([ua.SecurityPolicyType.NoSecurity])
server.start()
try:
while True:
i = 1
finally:
server.stop()
'Dockerfile' 公开了以下端口 EXPOSE 4840
。 Docker run
命令是
docker run --rm --name server -p 4840:4840 opcua
您需要在 docker run
命令中使用 --network host
,因为容器上的 localhost
不是您的 host
容器中的服务器只监听 127.0.0.1
,因此只接受来自容器内部的连接:
server.set_endpoint('opc.tcp://127.0.0.1:4840')
您应该收听所有主机,例如:
server.set_endpoint('opc.tcp://0.0.0.0:4840')
我已经对一个简单的 OPC UA 服务器进行了 docker 化。当我在本地 运行 时,我能够毫无问题地连接到服务器。但是,当我 运行 服务器在 Docker 容器中时,客户端拒绝连接。此外,当我尝试将服务器端点设置为 opc.tcp://localhost:4840 时,服务器在容器内 运行 时不会绑定到该地址。必须使用端点 opc.tcp://127.0.0.1:4840。当 运行 在本地连接服务器时,这不是问题。以下库用于实现服务器 https://github.com/FreeOpcUa/python-opcua and the client used is https://github.com/FreeOpcUa/opcua-client-gui.
我试过设置不同的端点,但没有成功。
服务器实现是:
from opcua import Server, ua
server = Server()
server.set_endpoint('opc.tcp://127.0.0.1:4840')
server.set_security_policy([ua.SecurityPolicyType.NoSecurity])
server.start()
try:
while True:
i = 1
finally:
server.stop()
'Dockerfile' 公开了以下端口 EXPOSE 4840
。 Docker run
命令是
docker run --rm --name server -p 4840:4840 opcua
您需要在 docker run
命令中使用 --network host
,因为容器上的 localhost
不是您的 host
容器中的服务器只监听 127.0.0.1
,因此只接受来自容器内部的连接:
server.set_endpoint('opc.tcp://127.0.0.1:4840')
您应该收听所有主机,例如:
server.set_endpoint('opc.tcp://0.0.0.0:4840')