Man*_*ndo 27 docker linux-containers
我处理具有不同进程的应用程序,并且我被要求包含这些进程以实现更多隔离.
问题是进程与单个"管理程序"进程共享内存以交换数据(它们使用经典的共享缓冲区).此解决方案是为了性能要求而实现的,因为它在用户空间中运行,因此用户空间和内核空间之间没有内容切换.
如果我没有错,则无法在单个IPC命名空间内运行多个docker容器,但我不知道单个docker容器是否可能属于不同的IPC命名空间,这可以解决我的问题.
其他解决方案是受欢迎的,请记住,性能是一项要求,提前谢谢.
Mat*_*att 26
此后,这些--ipc=host和--ipc=container:id选项已添加到Docker create和run命令以共享IPC资源.
Run Code Online (Sandbox Code Playgroud)--ipc="" : Set the IPC mode for the container, 'container:<name|id>': reuses another container's IPC namespace 'host': use the host's IPC namespace inside the container
IPC与主机
docker run --ipc=host <image>
Run Code Online (Sandbox Code Playgroud)
IPC与另一个Container
docker run --ipc=container:<id> <image>
Run Code Online (Sandbox Code Playgroud)
jpe*_*zzo 14
从技术上讲,您可以在容器之间共享相同的IPC命名空间,但Docker(尚未)支持它.
如果您可以使用mmap()而不是IPC,那么您可以在两个容器之间共享一个卷,并在该卷上映射文件; 它将是同一个文件,因此可以正确共享.
如果你真的需要共享IPC命名空间(因为你无法更改现有代码),那么是时候编写一些Go代码并将其贡献给Docker :-)
最简单的路径可能是为libcontainer绑定添加一个标志,以便您可以启动一个容器重用主机(或另一个容器)的IPC命名空间.检查--net标志的实现,因为它实现了这一点,但对于网络命名空间.
正如@jpetazzo所建议的那样,我看了Docker的来源,并且在#docker-dev的开发人员的帮助下,我成功地重新编译了Docker,以便删除IPC命名空间.
为此,需要"NEWIPC": true,在default_template.go位于docker/daemon/execdriver/native/templateDocker源代码文件夹中的文件中注释该行.
旧代码现在完美无缺.
| 归档时间: |
|
| 查看次数: |
17460 次 |
| 最近记录: |