跨 Docker 容器共享内存:"--ipc=host"与"--ipc=sharedable"



我正在设置两个docker容器 - 一个是将数据保存在内存中的服务器,另一个是访问该数据的客户端。为此,我相信我需要使用--ipc标志在容器之间共享内存。Docker文档很好地解释了--ipc标志。根据文档正在运行的对我来说有意义的是:

docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client

但是我阅读的所有堆叠式问题(1,2,3,4(将两个容器直接链接到主机:

docker run -d --ipc=host data-server
docker run -d --ipc=host data-client

哪个更适合此用例?如果ipc=host更好,您什么时候使用ipc=shareable

来自doc:

- ipc =" mode":为容器设置IPC模式

"可共享":自己的私人IPC名称空间,有可能与其他容器共享。

主机;:使用主机系统的IPC名称空间。

shareablehost之间的区别是主机是否可以访问共享内存。

  • IPC(POSIX/SYSV IPC(名称空间提供了命名共享内存段,信号量和消息队列的分离。因此,两种模式之间的性能没有差异。
  • 共享内存通常由数据库和自定义构建(通常是C/OpenMPI,C /使用Boost库(用于科学计算和金融服务行业的高性能应用程序。

使用host考虑服务的安全性,将IPC名称空间揭示到对主机控制的攻击者。使用shareable,只有在容器内访问IPC名称空间,其中可能包含任何攻击。host模式存在以允许容器与其主机之间的合作。

通常很难知道问答器的环境和要求的所有细节,因此host往往是最常见的建议,因为最容易理解和配置。

最新更新