跨Docker容器共享内存:'--ipc=主机';与'--ipc=可共享';

跨Docker容器共享内存:'--ipc=主机';与'--ipc=可共享';,docker,ipc,shared-memory,Docker,Ipc,Shared Memory,我正在设置两个docker容器——一个作为服务器在内存中保存数据,另一个作为客户端访问数据。为此,我认为需要使用--ipc标志在容器之间共享内存。码头工人很好地解释了--ipc标志。根据正在运行的文档,我认为有意义的是: docker run -d --ipc=shareable data-server docker run -d --ipc=container:data-server data-client 但是我读到的所有Stackoverflow问题(,)都将两个容器直接链接到主机: d

我正在设置两个docker容器——一个作为服务器在内存中保存数据,另一个作为客户端访问数据。为此,我认为需要使用
--ipc
标志在容器之间共享内存。码头工人很好地解释了
--ipc
标志。根据正在运行的文档,我认为有意义的是:

docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client
但是我读到的所有Stackoverflow问题(,)都将两个容器直接链接到主机:

docker run -d --ipc=host data-server
docker run -d --ipc=host data-client
哪个更适合这个用例?如果
ipc=host
更好,您何时使用
ipc=shareable

来自:

--ipc=“MODE”:设置容器的ipc模式

“可共享”:拥有私有IPC名称空间,可以与其他容器共享

“主机”:使用主机系统的IPC命名空间

sharedable
host
之间的区别在于主机是否可以访问共享内存

  • IPC(POSIX/SysV IPC)命名空间提供命名共享内存段、信号量和消息队列的分离。因此,两种模式之间的性能应该没有差异
  • 共享内存通常用于科学计算和金融服务行业的数据库和定制(通常是C/OpenMPI、C++/使用boost库)高性能应用程序
考虑到服务的安全性,使用
主机
将IPC命名空间暴露给控制主机的攻击者。使用可共享的,IPC命名空间只能在容器内部访问,其中可能包含任何攻击。主机模式允许容器与其主机之间的协作


通常很难了解询问者的环境和要求的所有细节,因此
host
往往是最常用的建议,因为它最容易理解和配置。

因此两者都是有效的,但第一个选项对容器更安全?是的,就是这样。如果不仅仅在容器之间共享,还可以使用hostGotcha。还有一个问题:
是否可共享
可选?我猜这意味着,如果你不需要在容器之间共享内存,那么你可以不使用它,而使用套接字或其他工具。但是,如果你关心通信速度,并且想使用共享内存,你必须在它上面。这是您的选项,具体取决于您的应用程序场景