Nigel Brown在docker-proxy上写了一篇详细的文章,解释了如何以及为什么。
的docker-proxy
,然后,是一个“捕获所有”用于允许容器端口转发到主机多克尔方法。但是,通常认为这docker- proxy
是对上述问题的不佳解决方案,并且当暴露大量容器端口时,它将消耗大量内存。先前曾尝试删除对的依赖docker-proxy
,但这与RHEL 6.x和CentOS 6.x中老化的内核的限制相抵触,Docker项目感到必须支持这些限制。因此,在docker- proxy
当前版本1.5之前的所有Docker版本中,这些 仍然是Docker经验的主要组成部分。在我撰写本文时,即将发布1.6版,并且已经采取了一些措施来删除对docker- proxy
,我将在另一篇文章中介绍。
Docker现在包括一个守护程序运行时选项,以使用禁用用户态代理--userland- proxy=false
。这是在v1.7中引入的。
禁用userland代理时,似乎存在一些边缘案例错误。还有IPV6问题
GitHub上存在一个开放的问题,默认情况下禁用userland代理(Docker不再支持RHEL6)。
除了以这种方式实现之外,似乎没有其他原因。一个进程应该能够处理容器的所有端口映射
该
代理实现和
包装看起来干净和内置转到
功能使用所以这可能只是转到最初的
垃圾收集范围,允许它增长到5MB?。
:内存使用已在Docker 1.12中得到了改进。每个端口仍然有一个进程,但是每个进程现在仅使用约750k的私有内存空间。