从一个容器到另一个容器执行代码(即从 API 容器在工作容器上执行脚本)
Executing Code from one Container to Another (i.e. execute script on worker container from an API container )
我有一个 docker-compose 由四个容器组成,所有容器都执行一个功能:
一个 nginx 代理,将 UI 和 API 请求转发到相应的容器(节点容器、flask 容器),如下图所示。
还有一个单独的容器,它执行长 运行 python 脚本并独立于其他容器工作。我现在想通过 API:
创建在 "long running scripts" (LRS) 容器中执行脚本的能力
最好的方法是什么?
我看到了一些与此有些相似的其他问题,但提出的问题多于他们回答的问题。我看到的建议包括:
- 将docker.sock传入API容器;从 API 容器,执行到 LRS 并执行预期的脚本
- 这不会造成严重的安全漏洞吗?
- 这不是需要在API容器上安装docker才能执行,违反了docker的关注点分离原则吗?
- LRS 容器上的 HTTP 侦听器,侦听来自 API 的命令以便在 LRS 上执行脚本
- 同样,这是否违反了关注点分离,因为我现在本质上需要 LRS 容器中的轻量级 API 来监听主体 API 的操作?
None 这个解决方案看起来很理想。我错过了什么吗?如何实现预期的功能?
通常 运行 长 运行ning 脚本的解决方案是发布-订阅模型。您的 API 会将消息放到执行消息队列中。工作者实例将订阅该队列,并且当消息出现时,将执行您的 long-运行ning script/query/etc。执行完成后,消息将返回到不同的队列,或者结果将放置在预定位置 (url)。
这有几个优点:
- 两个解决方案相互有效隔离
- 如果您需要更多容量,可以通过添加额外的工作人员来横向扩展 LRS(工作人员)解决方案
- 如果 LRS 实例关闭,API 将不依赖于它是否启动。当实例可用时,工作将排队等待。
我有一个 docker-compose 由四个容器组成,所有容器都执行一个功能:
一个 nginx 代理,将 UI 和 API 请求转发到相应的容器(节点容器、flask 容器),如下图所示。
还有一个单独的容器,它执行长 运行 python 脚本并独立于其他容器工作。我现在想通过 API:
创建在 "long running scripts" (LRS) 容器中执行脚本的能力最好的方法是什么?
我看到了一些与此有些相似的其他问题,但提出的问题多于他们回答的问题。我看到的建议包括:
- 将docker.sock传入API容器;从 API 容器,执行到 LRS 并执行预期的脚本
- 这不会造成严重的安全漏洞吗?
- 这不是需要在API容器上安装docker才能执行,违反了docker的关注点分离原则吗?
- LRS 容器上的 HTTP 侦听器,侦听来自 API 的命令以便在 LRS 上执行脚本
- 同样,这是否违反了关注点分离,因为我现在本质上需要 LRS 容器中的轻量级 API 来监听主体 API 的操作?
None 这个解决方案看起来很理想。我错过了什么吗?如何实现预期的功能?
通常 运行 长 运行ning 脚本的解决方案是发布-订阅模型。您的 API 会将消息放到执行消息队列中。工作者实例将订阅该队列,并且当消息出现时,将执行您的 long-运行ning script/query/etc。执行完成后,消息将返回到不同的队列,或者结果将放置在预定位置 (url)。
这有几个优点:
- 两个解决方案相互有效隔离
- 如果您需要更多容量,可以通过添加额外的工作人员来横向扩展 LRS(工作人员)解决方案
- 如果 LRS 实例关闭,API 将不依赖于它是否启动。当实例可用时,工作将排队等待。