连接到容器内的 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 4840Docker 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')