Я докеризировал простой сервер OPC UA. Когда я запускаю его локально, я могу без проблем подключиться к серверу. Однако, когда я запускаю сервер в контейнере 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






вам нужно использовать --network host в вашей команде docker run, так как 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')