Как общаться между контейнерами Docker - PullRequest
0 голосов
/ 16 января 2019

Я новичок в Docker и методах контейнеризации в целом, поэтому я могу просто думать об этом неправильно, но я пытаюсь настроить приложение PowerShell как сервис , в котором клиент может общаться с оболочка powershell двумя способами:

  1. Облегченный HTTP API
  2. HTTP WebSocket

Согласно тому, что я прочитал, мы хотим, чтобы каждый сервис находился в своем собственном контейнере, а это значит, что мне нужно 2 разных контейнера:

  1. В одном контейнере будет размещаться PowerShell в Windows с использованием образа докера mcr.microsoft.com/powershell, и он предварительно собран с модулем AzureAD для PowerShell.
  2. В другом контейнере будет размещена моя конечная точка API, которая общедоступна по какому-либо адресу, например http:localhost:8080.

Я хочу иметь возможность запускать что-то вроде:

POST http://localhost:8080/powershell/command
{
    "command": "Get-AzureADUser -ObjectId <guid>"
}

Тогда я бы каким-то образом передал бы эту "команду" через экземпляр PowerShell, работающий в другом контейнере. Где я запутался, как это можно сделать? Как таковой, контейнер Windows, размещенный в PowerShell, не предоставляет никаких портов или способов связи с ним. По сути, это черный ящик, с которым вы можете взаимодействовать только через что-то вроде docker run -it <image> верно? Эта команда позволяет мне удаленно (это правильный термин для него?) В контейнер и запускать команды в PowerShell.

Единственный способ, которым я могу думать об этом, - это НЕ использовать 2 контейнера и вместо этого использовать образ dotnet-mvc или node-windows в качестве моей базы, создать второе изображение, включающее установку powershell, а затем, наконец, использовать это второе изображение для размещения всей моей заявки. Затем в приложении .NET MVC или NodeJS я отвечаю за разветвление псевдо-терминала узла, используя что-то вроде node-pty. И так как мой образ уже содержит модуль AzureAD из файла docker, я должен иметь возможность просто передавать команды через psuedo-терминал через stdin / stdout.

Мне кажется, что у этого приложения есть 2 разных сервиса, поэтому он чувствует себя "хаки", когда использует один контейнер, но если это единственное решение, думаю, это то, что я должен сделать.

Приветствуются любые рекомендации или советы о том, как я могу это сделать! Спасибо

...