我有一个简单的dotnet核心控制台应用程序,它包含2个项目(c#) 第一个是外部库,它针对以dotnet标准为目标的dotnet标准websockets客户端进行了一些包装。
另一个是实际的控制台应用程序,它从websockets客户端获取结果并将其推送到Azure中的Service Bus队列。
在我的电脑和Windows容器中使用dotnet ConsoleApp.dll可以正常工作。但是,当我在Linux容器中运行它时,它会失败。我认为它是因为它无法加载依赖项 - 即使它们位于容器的输出文件夹中。
我的Docker文件如下所示:
FROM microsoft/dotnet:2.0-sdk
COPY WebsocketClient ./app/WebsocketClient
WORKDIR /
COPY ConsoleApp ./app/ConsoleApp
WORKDIR ./app/ConsoleApp
RUN dotnet publish -c Release -o out
CMD ["dotnet", "./out/ConsoleApp.dll"]
root @ e70c9468b11c:/ app / ConsoleApp / out #netnet run
启动Websocket客户端! 套接字状态从无变为连接
未处理的异常:套接字状态从“连接”更改为“已关闭” 套接字关闭原因:空 System.AggregateException:发生一个或多个错误。 (无法连接到远程服务器)---> System.Net.WebSockets.WebSocketException:无法连接到远程服务器 在System.Net.WebSockets.WebSocketHandle.d__28.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() 在System.Net.WebSockets.WebSocketHandle.d__24.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Net.WebSockets.ClientWebSocket.d__16.MoveNext() ---内部异常堆栈跟踪结束--- 在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 在System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout,CancellationToken cancellationToken) 在PureWebSockets.PureWebSocket.Connect() 在PureSocketCluster.PureSocketClusterSocket.Connect() 在/app/WebsocketClient/WsClient.cs:line 187中的WebsocketClient.WsClient.Connect() at ConsoleApp.Program.Main(String [] args)在/app/ConsoleApp/Program.cs:line 62
root @ e70c9468b11c:/ app / ConsoleApp / out #ls
ConsoleApp.deps.json ConsoleApp.runtimeconfig.json Microsoft.Azure.Amqp.dll PureSocketCluster.dll ConsoleApp.dll WebsocketClient.dll Microsoft.Azure.ServiceBus.dll PureWebSockets.dll ConsoleApp.pdb WebsocketClient.pdb Newtonsoft.Json.dll