连接到在容器内运行的OPC UA服务器

时间:2019-07-02 07:05:24

标签: python docker opc-ua

我已经对一个简单的OPC UA服务器进行了docker化。在本地运行时,我可以毫无问题地连接到服务器。但是,当我在Docker容器中运行服务器时,客户端拒绝连接。此外,当我尝试将服务器的端点设置为opc.tcp:// localhost:4840时,服务器在容器内运行时将不会绑定到该地址。必须使用端点opc.tcp://127.0.0.1:4840。在本地运行服务器时,这不是问题。以下库用于实现服务器https://github.com/FreeOpcUa/python-opcua,而使用的客户端为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

2 个答案:

答案 0 :(得分:0)

您需要在<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://www.jqueryscript.net/demo/jQuery-Date-Time-Picke-Plugin-Simple-Datetimepicker/jquery.simple-dtpicker.js"></script> <link type="text/css" href="https://www.jqueryscript.net/demo/jQuery-Date-Time-Picke-Plugin-Simple-Datetimepicker/jquery.simple-dtpicker.css" rel="stylesheet"> <input type="text" name="date9" id="datetimepicker2">命令中使用--network host,因为conatiner上的docker run不是您的localhost

答案 1 :(得分:0)

您的容器中的服务器仅监听127.0.0.1,因此仅接受来自容器内部的连接:

server.set_endpoint('opc.tcp://127.0.0.1:4840')

您应该收听所有主机,例如:

server.set_endpoint('opc.tcp://0.0.0.0:4840')