我已经对一个简单的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 4840
。 Docker run
命令是
docker run --rm --name server -p 4840:4840 opcua
答案 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')