一般来说,我是Docker和容器化方法的新手,所以我可能只是在想这个错误,但是我试图设置 PowerShell即服务类型的应用程序,客户端可以与之通信Powershell外壳有2种方式:
根据我所阅读的内容,我们希望每个服务都位于其自己的容器中,这意味着我认为我需要2个不同的容器:
mcr.microsoft.com/powershell
在Windows上托管PowerShell,并已使用PowerShell的AzureAD模块预先构建。 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个不同的服务,因此使用单个容器感觉“很棘手”,但是如果这是唯一的解决方案,我想那就是我必须要做的。
欢迎任何有关如何实现此目标的指导或提示! 谢谢