跨 Docker 容器共享内存:“--ipc=host”与“--ipc=shareable”

Jac*_*ern 6 ipc shared-memory docker

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

docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client
Run Code Online (Sandbox Code Playgroud)

但我读过的所有 Stackoverflow 问题(1、2、3、4 )将两个容器直接链接到主机:

docker run -d --ipc=host data-server
docker run -d --ipc=host data-client
Run Code Online (Sandbox Code Playgroud)

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

atl*_*ine 4

来自文档

\n
\n

--ipc="MODE" : 设置容器的IPC模式

\n

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

\n

“host”:使用主机系统\xe2\x80\x99s IPC命名空间。

\n
\n

shareable和的区别host在于主机是否可以访问共享内存。

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

考虑到服务的安全性host,使用将IPC命名空间暴露给控制主机的攻击者。使用shareable,IPC 命名空间只能在容器内部访问,其中可能包含任何攻击。该host模式的存在是为了允许容器与其主机之间进行协作。

\n

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

\n