从Windows上的C#Service Fabric应用程序连接到docker_引擎(命名管道)
我有一个无状态的ServiceFabric项目(.netcore),需要从中启动Docker作业。我使用的是从Windows上的C#Service Fabric应用程序连接到docker_引擎(命名管道),c#,docker,azure-service-fabric,docker-for-windows,service-fabric-on-premises,C#,Docker,Azure Service Fabric,Docker For Windows,Service Fabric On Premises,我有一个无状态的ServiceFabric项目(.netcore),需要从中启动Docker作业。我使用的是Docker.DotNet,以下代码在小型控制台应用程序中运行良好,但在Service Fabric中不起作用: var dockerClient = new DockerClientConfiguration(new Uri("npipe://./pipe/docker_engine")).CreateClient(); // error occurs on next line (in
Docker.DotNet
,以下代码在小型控制台应用程序中运行良好,但在Service Fabric中不起作用:
var dockerClient = new DockerClientConfiguration(new Uri("npipe://./pipe/docker_engine")).CreateClient();
// error occurs on next line (in Service Fabric)...
dockerClient.Images
.CreateImageAsync(new ImagesCreateParameters
{
FromImage = "jbarlow83/ocrmypdf",
Tag = "latest"
},
new AuthConfig(),
new Progress<JSONMessage>());
var dockerClient=new DockerClientConfiguration(新Urinpipe://./pipe/docker_engine))。CreateClient();
//下一行(在服务结构中)发生错误。。。
dockerClient.图像
.CreateImageAsync(新的ImagesCreateParameters
{
FromImage=“jbarlow83/ocrmypdf”,
Tag=“最新”
},
新建AuthConfig(),
新进展();
如果尝试从无状态SF项目运行Service Fabric Explorer,我会在其中看到此错误:
System.UnauthorizedAccessException: Access to the path is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Pipes.NamedPipeClientStream.ConnectInternal(Int32 timeout, CancellationToken cancellationToken, Int32 startTime)
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Docker.DotNet.DockerClient.<>c__DisplayClass6_0.<<-ctor>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.Net.Http.Client.ManagedHandler.d__33.MoveNext()
System.UnauthorizedAccessException:对路径的访问被拒绝。
在System.IO.\uuu Error.WinIOError(Int32 errorCode,字符串maybeFullPath)
位于System.IO.Pipes.NamedPipeClientStream.ConnectionInternal(Int32超时、CancellationToken CancellationToken、Int32 startTime)
在System.Threading.Tasks.Task.Execute()中
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Docker.DotNet.DockerClient.c__DisplayClass6_0.d.MoveNext()中
---来自引发异常的上一个位置的堆栈结束跟踪---
在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()中
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在Microsoft.Net.Http.Client.ManagedHandler.d_u33.MoveNext()上
我不确定这是否真的是一个权限问题,或者它是否与服务结构网络隔离的工作方式有关
我正在我的本地开发实例上尝试这一点,这最终(希望)会进入内部设置
是否有方法访问承载SF应用程序的节点上的命名管道?或者是通过.NET Core SF应用程序运行Docker的另一种建议方式?我可以通过将我的
DockerClientConfiguration
行更改为不再使用命名管道,而是使用http://localhost:2375
:
var dockerClient = new DockerClientConfiguration(new Uri("http://localhost:2375")).CreateClient();
然后在上启用暴露守护进程tcp://localhost:2375 在Docker CE常规设置中没有TLS:
我今天遇到这个问题时遇到了这个问题,如果您不想从命名的管道连接切换到其他解决方案,那么最终会遇到另一个问题。如果您将服务结构服务设置为作为本地系统帐户而不是默认帐户运行,那么它也应该可以工作 您可以按照说明更改清单中运行无状态服务的帐户
这是因为根据,只有特定类型的帐户才能访问命名管道,其中之一是LocalSystem。您知道如何创建新的LocalSystem帐户吗?