跨 Docker 个容器共享内存:“--ipc=host”与“--ipc=shareable”
Sharing Memory across Docker containers: '--ipc=host' vs. '--ipc=shareable'
我正在设置两个 docker 容器 - 一个作为服务器在内存中保存数据,另一个作为客户端访问该数据。为此,我相信我需要使用 --ipc
标志在容器之间共享内存。 Docker documentation 很好地解释了 --ipc
标志。根据文档,对我来说有意义的是 运行:
docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client
但是我读过的所有 Whosebug 问题 (1, , , 4) link 两个容器直接到主机:
docker run -d --ipc=host data-server
docker run -d --ipc=host data-client
哪个更适合这个用例?如果ipc=host
更好,你什么时候用ipc=shareable
?
来自doc:
--ipc="MODE" : Set the IPC mode for the container
"shareable": Own private IPC namespace, with a possibility to share it with other containers.
"host": Use the host system’s IPC namespace.
shareable
和host
的区别在于主机是否可以访问共享内存。
- IPC(POSIX/SysV IPC)命名空间提供命名共享内存段、信号量和消息队列的分离。因此,两种模式之间的性能应该没有差异。
- 共享内存通常被数据库和 custom-built(通常 C/OpenMPI,C++/使用 boost 库)高性能应用程序用于科学计算和金融服务行业。
考虑到服务的安全性,使用host
会将IPC命名空间暴露给控制主机的攻击者。使用 shareable
,IPC 命名空间只能在容器内部访问,其中可能包含任何攻击。 host
模式的存在是为了允许容器与其主机之间的合作。
通常很难了解提问者的所有环境细节和要求,因此 host
往往是最常推荐的,因为它最容易理解和配置。
我正在设置两个 docker 容器 - 一个作为服务器在内存中保存数据,另一个作为客户端访问该数据。为此,我相信我需要使用 --ipc
标志在容器之间共享内存。 Docker documentation 很好地解释了 --ipc
标志。根据文档,对我来说有意义的是 运行:
docker run -d --ipc=shareable data-server
docker run -d --ipc=container:data-server data-client
但是我读过的所有 Whosebug 问题 (1,
docker run -d --ipc=host data-server
docker run -d --ipc=host data-client
哪个更适合这个用例?如果ipc=host
更好,你什么时候用ipc=shareable
?
来自doc:
--ipc="MODE" : Set the IPC mode for the container
"shareable": Own private IPC namespace, with a possibility to share it with other containers.
"host": Use the host system’s IPC namespace.
shareable
和host
的区别在于主机是否可以访问共享内存。
- IPC(POSIX/SysV IPC)命名空间提供命名共享内存段、信号量和消息队列的分离。因此,两种模式之间的性能应该没有差异。
- 共享内存通常被数据库和 custom-built(通常 C/OpenMPI,C++/使用 boost 库)高性能应用程序用于科学计算和金融服务行业。
考虑到服务的安全性,使用host
会将IPC命名空间暴露给控制主机的攻击者。使用 shareable
,IPC 命名空间只能在容器内部访问,其中可能包含任何攻击。 host
模式的存在是为了允许容器与其主机之间的合作。
通常很难了解提问者的所有环境细节和要求,因此 host
往往是最常推荐的,因为它最容易理解和配置。