在Docker容器之间传输数据的最有效方法是什么

era*_*oul 12 memory video buffer shared docker

我有来自传感器设备(例如视频)的每秒大量字节,这些传感器设备正由Docker容器中的进程读取和处理.

我有一个想要读取已处理字节流的第二个Docker容器(仍然是每秒大量字节).

什么是读取此流的有效方法?理想情况下,我想让第一个容器写入第二个容器可以读取的某种共享内存缓冲区,但我不认为单独的Docker容器可以共享内存.也许有一些共享文件指针的解决方案,文件保存到内存文件系统?

我的目标是尽可能地提高性能并尽可能减少从一个缓冲区到另一个缓冲区的无用数据副本.

编辑:很想拥有Linux和Windows的解决方案.同样,我有兴趣在C++和python中找到解决方案.

mvi*_*eck 7

使用mkfifo /tmp/myfifo. 与两个容器共享它:--volume /tmp/myfifo:/tmp/myfifo:rw

你可以直接使用它:

  • 从容器 1: echo foo >>/tmp/myfifo

  • 在容器 2 中: read var </tmp/myfifo

缺点:容器 1 被阻塞,直到容器 2 读取数据并清空缓冲区。

避免阻塞:在两个容器中,运行 bash exec 3<>/tmp/myfifo

  • 从容器 1: echo foo >&3

  • 在容器 2 中:(read var <&3或例如cat <&3

此解决方案使用exec来自bash. 我不知道怎么做,但当然其他语言也可以。