首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在docker容器之间共享内存?

是否可以在docker容器之间共享内存?
EN

Stack Overflow用户
提问于 2014-05-27 20:14:59
回答 3查看 30.4K关注 0票数 43

我在一个具有不同进程的应用程序上工作,我被要求包含这些进程以实现更多的隔离。

问题在于,为了交换数据,这些进程与单个“系统管理程序”进程共享内存(它们使用经典的共享缓冲区)。这个解决方案是为了满足性能要求而实现的,并且由于它是在用户空间运行的,所以不存在用户空间和内核空间之间的内容切换。

如果我没弄错,不可能在单个IPC名称空间中运行多个docker容器,但我不知道单个docker容器是否可能属于不同的IPC名称空间,这可以解决我的问题。

欢迎其他解决方案,只需记住性能是一个要求,提前感谢。

EN

回答 3

Stack Overflow用户

发布于 2014-05-28 00:57:51

从技术上讲,您可以在容器之间共享相同的IPC名称空间,但Docker还不支持这一点。

如果您可以使用mmap()而不是IPC,那么您可以在两个容器之间共享一个卷,并在该卷上映射一个文件;它将是相同的文件,因此可以正确地共享。

如果您确实需要共享IPC名称空间(因为您不能更改现有代码),那么是时候编写一些Go代码并将其贡献给Docker :-)

最简单的方法可能是向libcontainer绑定添加一个标志,这样您就可以重用主机(或另一个容器)的IPC名称空间来启动容器。检查--net标志的实现,因为除了网络名称空间之外,它确实实现了这一点。

票数 14
EN

Stack Overflow用户

发布于 2014-10-02 21:32:46

根据@jpetazzo的建议,我查看了Docker的源代码,并且在#docker-dev上的开发人员的帮助下,我成功地recompiled Docker了,以便删除IPC名称空间。

要实现这一点,有必要在Docker源代码的docker/daemon/execdriver/native/template文件夹中的default_template.go文件中注释"NEWIPC": true,行。

旧的代码现在可以完美地工作。

票数 9
EN

Stack Overflow用户

发布于 2020-11-05 19:06:55

下面是它的工作原理:

使用可共享的ipc启动容器

docker run -it --rm --ipc="shareable" --name cont1 ubuntu

然后启动下一个容器并与其ipc共享

docker run -it --rm --name cont2 --ipc container:cont1 ubuntu
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23889187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档