我每秒有大量字节来自传感器设备(例如视频),正在被 Docker 容器中的进程读取和处理。
我有第二个 Docker 容器,它想读取已处理的字节流(每秒仍然有大量字节)。
读取此流的有效方法是什么?理想情况下,我希望第一个容器写入某种共享内存缓冲区,第二个容器可以从中读取,但我不认为单独的 Docker 容器可以共享内存。也许有一些使用共享文件指针的解决方案,将文件保存到内存文件系统中?
我的目标是最大限度地提高性能并尽可能减少从一个缓冲区到另一个缓冲区的无用数据副本。
编辑:希望有适用于 Linux 和 Windows 的解决方案。同样,我有兴趣在 C++ 和 python 中找到解决方案。
最佳答案
用 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
的文件描述符处理.我不知道怎么做,但其他语言当然也可以。
关于docker - 在 Docker 容器之间流式传输数据的最有效方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294841/