如何在Docker容器之间进行通信

时间:2019-01-15 21:25:55

标签: node.js powershell docker windows-container

一般来说,我是Docker和容器化方法的新手,所以我可能只是在想这个错误,但是我试图设置 PowerShell即服务类型的应用程序,客户端可以与之通信Powershell外壳有2种方式:

  1. 轻量级的HTTP API
  2. HTTP WebSocket

根据我所阅读的内容,我们希望每个服务都位于其自己的容器中,这意味着我认为我需要2个不同的容器:

  1. 一个容器将使用docker映像mcr.microsoft.com/powershell在Windows上托管PowerShell,并已使用PowerShell的AzureAD模块预先构建。
  2. 另一个容器将托管我的API终结点,该终结点可以在http:localhost:8080之类的地址上公开使用。

我希望能够运行以下内容:

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

然后,我将通过某种方式 将“命令”传递到在另一个容器中运行的PowerShell实例。让我感到困惑的是如何做到这一点?照原样,PowerShell托管的Windows容器不会公开任何端口或与其进行通信的任何方式。它基本上是一个黑匣子,您只能通过docker run -it <image>之类的东西与之互动,对吧?该命令使我可以远程访问容器(是否合适吗?)并在PowerShell中运行命令。

我能想到的唯一方法是不使用2个容器,而是使用dotnet-mvc或node-windows映像作为我的基础,创建第二个包含powershell安装的映像,然后最终使用该映像第二张图片来托管我的整个应用程序。然后,在.NET MVC或NodeJS应用程序内部,我将负责使用诸如node-pty之类的节点伪终端。而且由于我的映像已经包含来自dockerfile的AzureAD模块,因此我应该能够仅通过stdin / stdout将命令通过管道传递到psuedo终端。

我认为该应用程序具有2个不同的服务,因此使用单个容器感觉“很棘手”,但是如果这是唯一的解决方案,我想那就是我必须要做的。

欢迎任何有关如何实现此目标的指导或提示! 谢谢

0 个答案:

没有答案