Запуск докера не показывает вывод запуска dotnet

#c# #docker #opc-ua

Вопрос:

Я пытаюсь докеризировать клиент C# OPC UA, но, к сожалению, у меня эта ошибка:

 Unhandled exception. Opc.Ua.ServiceResultException: Error establishing a connection: BadNotConnected at Opc.Ua.Bindings.ChannelAsyncOperation`1.End(Int32 timeout, Boolean throwOnError) at Opc.Ua.Bindings.UaSCUaBinaryClientChannel.EndSendRequest(IAsyncResult result) at Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.EndSendRequest(IAsyncResult result) at Opc.Ua.Bindings.UaSCUaBinaryTransportChannel.SendRequest(IServiceRequest request) at Opc.Ua.DiscoveryClient.GetEndpoints(RequestHeader requestHeader, String endpointUrl, StringCollection localeIds, StringCollection profileUris, EndpointDescriptionCollectionamp; endpoints) at Opc.Ua.DiscoveryClient.GetEndpoints(StringCollection profileUris) at Opc.Ua.Client.CoreClientUtils.SelectEndpoint(String discoveryUrl, Boolean useSecurity, Int32 discoverTimeout) at client.Program.OPCUAClass.InitializeOPCUAClient() in C:UsersmyuserDesktopclientProgram.cs:line 182 at client.Program.OPCUAClass..ctor(String serverAddres, String serverport, Dictionary`2 taglist, Boolean sessionrenewalRequired, Double sessionRenewalMinutes, String nameSpace) in C:UsersmyuserDesktopclientProgram.cs:line 98 at client.Program.Main(String[] args) in C:UsersmyuserDesktopclientProgram.cs:line 58  

У кого-нибудь уже была эта ошибка? Или кто-нибудь уже докеризовал клиент C#, знает, как в этом случае должен быть написан файл dockerfile?

У клиента нет интерфейса, но он печатает узлы только на терминале при изменении данных. Обычно я использую команду dotnet run для запуска клиента. Это мой док-файл:

 FROM mcr.microsoft.com/dotnet/sdk:6.0-focal  COPY bin/Release/net6.0/publish/ App/ COPY tagsList.txt App/ WORKDIR /App  ENTRYPOINT ["dotnet", "client.dll"]  

А вот строки Program.cs с ошибками:

58: myOPCUAServer = new OPCUAClass(endpointURL, "62541", TagList, true, 1, "4");

98: InitializeOPCUAClient();

182: application.CheckApplicationInstanceCertificate(false, 2048).GetAwaiter().GetResult();

Я уже пытался изменить адрес opc с localhost на 0.0.0.0, но ничего не изменилось.

Комментарии:

1. 0.0.0.0 никогда не сработает. Когда вы видите, что упомянуто в сети, всегда указывается, с каких IP-адресов следует принимать соединения , и 0.0.0.0 означает всех. Вы являетесь клиентом, и вам необходимо указать адрес вашего сервера OPC UA. Localhost не работает, так как localhost-это контейнер, в котором запущено ваше приложение. Где работает ваш сервер OPC UA?

2. Сервер (устройство имитатора зажигания) работает на моем компьютере, и по этой причине я использовал localhost(127.0.0.1)

3. ОК. Если вашим хостом является Windows или Mac, попробуйте host.docker.internal . Если вашим хостом является Linux, то используйте 172.17.0.1 . Это должен быть адрес главной машины.

4. Где я должен использовать host.docker.internal? В моем адресе сервера? («opc.tcp://host.docker.внутренний:62541»)

5. ДА. Это сетевой адрес хост — машины внутри контейнера.