node.js - 从 Docker 容器 Web 应用程序内部触发主机操作系统上的事件

标签 node.js linux ubuntu docker clam

我有一个安装了 ClamAV 的主机操作系统 (Ubuntu)。我正在这个操作系统上运行 Docker 容器。该容器正在运行一个面向公众的 Node Web 应用程序。

此 Web 应用程序中有文件上传功能,可上传到 docker 容器内的文件夹。

此文件夹已“安装”,以便可以从主机操作系统访问它。

需要扫描病毒,然后需要向 Docker 容器应用程序报告扫描结果。然后,这些结果将被处理并转发给用户。

让主机操作系统知道文件何时上传到此文件夹的最佳方式是什么?

我想到的方法是:

  • 主机操作系统轮询文件夹以检查是否发生更改(不可取)。
  • 网络应用程序触发一些 Docker“事件”(或类似事件)来告诉主机操作系统扫描特定的子文件夹(因为文件将上传到特定的子文件夹并且不会是扁平的)。
  • 在网络应用上点击的特定 URL,然后在主机操作系统以某种方式监听时触发某些操作。

不知道是否有,或者所有这些方法都可以实现。

最佳答案

消息/作业队列怎么样?为了简单起见,可以使用 Redis 的 PubSub 功能(而不是 RabbitMQ 等)并创建另一个运行 Redis 的 Docker 镜像,并将 Redis 的端口暴露给 Node 镜像和主机。然后,Node 可以编写一条有关将文件上传到 Redis 的消息,然后主机上的工作程序/监听器可以处理该消息。为了报告回来,可以在相反的方向使用类似的方法,即主机上的工作人员写入(另一个)Redis channel ,图像中的工作人员使用该 channel 。

关于node.js - 从 Docker 容器 Web 应用程序内部触发主机操作系统上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46665118/

相关文章:

linux - gdb 使用什么机制来知道 "finish"函数调用的位置?

ruby - 在 Ubuntu 中为 open() 方法指定一个非标准的临时目录

node.js - 除非作为参数传入,否则无法添加快速路线

linux - Monogame (Linux) - 导入 fbx 资源

javascript - NodeJS - fs.exists() 抛出错误但文件在那里?

linux - 垃圾收集期间负载均衡器和 Tomcat 之间出现 SocketException

c++ - 在 Ubuntu 中使用 OpenSSL 的链接问题

ubuntu - 在 WSL 上使用 Ubuntu 18 追加或前置的搜索域不起作用

javascript - Joi 验证忽略嵌套键

javascript - 等待事件中的变量