Подключитесь к docker_engine (именованный канал) из приложения C # Service Fabric в Windows - PullRequest
0 голосов
/ 17 октября 2019

У меня есть проект Stateless Service Fabric (.NET Core), с которого мне нужно начать работу Docker. Я использую 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>());

Я вижу эту ошибку в Service Fabric Explorer, если я пытаюсь его запуститьиз проекта Stateless SF:

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()

Я не уверен, действительно ли это проблема с разрешениями или она связана с тем, как работает изоляция сети Service Fabric.

Я пробую это на своем локальном экземпляре разработки, и это в конечном итоге (надеюсь) перейдет к локальной установке.

Есть ли способ получить доступ к именованным каналам на узле, которыйхостинг SF-приложения? Или, возможно, другой предложенный способ запуска Docker через приложение .NET Core SF?

1 Ответ

0 голосов
/ 17 октября 2019

Я смог заставить это работать, изменив мою строку DockerClientConfiguration, чтобы больше не использовать именованные каналы, и вместо этого использовал http://localhost:2375:

var dockerClient = new DockerClientConfiguration(new Uri("http://localhost:2375")).CreateClient();

И затем включил Expose daemon на tcp: // localhost: 2375 без TLS в общих настройках Docker CE:

enter image description here

...