首页 > 解决方案 > Docker容器之间如何通信

问题描述

我通常是 Docker 和容器化方法的新手,所以我可能只是在想这个错误,但我正在尝试将PowerShell 设置为服务类型的应用程序,其中客户端可以通过 2 种方式与 powershell shell 通信:

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

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

  1. 一个容器将使用 docker 映像在 Windows 上托管 PowerShell,mcr.microsoft.com/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 将命令通过管道传递到伪终端。

我认为这个应用程序有 2 个不同的服务,所以使用单个容器感觉“hacky”,但如果这是唯一的解决方案,我想这就是我必须做的。

欢迎任何有关我如何完成此任务的指导或提示!谢谢

标签: node.jspowershelldockerwindows-container

解决方案


推荐阅读