Подключение к серверу OPC UA, работающему внутри контейнера - PullRequest
0 голосов
/ 02 июля 2019

Я докернизировал простой сервер 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

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Ваш сервер в контейнере только прослушивает 127.0.0.1, следовательно, только принимает соединение изнутри контейнера:

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

Вы должны прослушивать все хосты, такие как:

server.set_endpoint('opc.tcp://0.0.0.0:4840')
0 голосов
/ 02 июля 2019

вам нужно использовать --network host в вашей команде docker run, так как localhost на конатинере не ваше host

...