node.js - Docker容器之间如何通信
问题描述
我通常是 Docker 和容器化方法的新手,所以我可能只是在想这个错误,但我正在尝试将PowerShell 设置为服务类型的应用程序,其中客户端可以通过 2 种方式与 powershell shell 通信:
- 一个轻量级的 HTTP API
- 一个 HTTP WebSocket
根据我的阅读,我们希望每个服务都在自己的容器中,这意味着我认为我需要 2 个不同的容器:
- 一个容器将使用 docker 映像在 Windows 上托管 PowerShell,
mcr.microsoft.com/powershell
并且预构建了用于 PowerShell 的 AzureAD 模块。 - 另一个容器将托管我的 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”,但如果这是唯一的解决方案,我想这就是我必须做的。
欢迎任何有关我如何完成此任务的指导或提示!谢谢
解决方案
推荐阅读
- javascript - JavaScript & CSS:如何在 css 转换开始和结束之间记录 div 的位置
- javascript - 这个异步函数从哪里获取请求属性?
- php - 用php替换所有页面中的字符串
- linux - 提取两行之间的时间
- .net - 在 Vb Net 中读取多个 Xml?
- javascript - 如何更改日期格式?
- django - django.db.utils.ProgrammingError:关系“django_content_type”不存在
- html - 有没有办法在不必
输入所有这些行的情况下换行? - logging - RequestLogger 没有拦截所有的 http 请求
- python - 这是来自 Automate the Boring Stuff 的一段代码