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

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

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

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

最佳答案

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

  • IPC(POSIX / SysV IPC) namespace 提供命名共享内存段,信号量和消息队列的分隔。因此,两种模式之间的性能应该没有差异。
  • 共享内存通常用于科学计算和金融服务行业的数据库和定制构建的(通常为C / OpenMPI,C++ /使用boost库)高性能应用程序。

  • 考虑到服务的安全,使用host可将IPC namespace 公开给控制主机的攻击者。使用shareable,只能在容器内部访问IPC namespace ,其中可能包含任何攻击。存在host模式以允许容器与其主机之间进行协作。
    通常很难知道询问者的环境和要求的所有细节,因此host往往是最常用的建议,因为它最容易理解和配置。

    关于docker - 在Docker容器之间共享内存: '--ipc=host'与 '--ipc=shareable',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56878405/

    10-16 18:14