dockerbuild设失败 – “无法分配内存”

我的docker生成失败,出现以下错误:

Untar fork/exec /usr/bin/docker: cannot allocate memory 

所以我明白了 – 没有内存:)但我可以清楚地看到可用内存作为交换:

  total used free shared buffers cached Mem: 7517 7334 183 0 59 515 -/+ buffers/cache: 6759 758 Swap: 4095 2635 1460 

而且,Docker似乎需要一个巨大的内存块:

 $ top -a top - 03:48:07 up 18 days, 17 min, 2 users, load average: 1.88, 0.93, 0.42 Tasks: 127 total, 2 running, 125 sleeping, 0 stopped, 0 zombie Cpu(s): 49.9%us, 14.0%sy, 0.0%ni, 13.7%id, 22.2%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 7697592k total, 6351288k used, 1346304k free, 138804k buffers Swap: 4194300k total, 310324k used, 3883976k free, 1449268k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 root 20 0 3994m 2.1g 7548 S 6.6 28.8 64:20.43 docker 5318 root 20 0 1499m 724m 4368 S 65.5 9.6 0:08.80 ruby 978 root 20 0 1010m 616m 32 S 0.0 8.2 0:27.24 ruby 

所以问题是:
为什么没有“dockerbuild设”使用交换区作为额外的RAM,并决定杀死构build?

简单明了。 你内存不足。 您必须通过停止应用程序来释放内存。

交换通常比实际内存慢1000倍。 有很多应用程序会禁止它们的数据交换,例如:

  • 数据库通常迫使一些关键数据不可交换,以表演。

  • 由于各种原因,内核和驱动程序等低级系统组件是不可交换的。 (如果磁盘驱动程序已被交换,如何读交换磁盘?:D)

Docker依赖于许多低级的原语来运行和操作容器,他们很可能需要有真实的内存可用。 因此,Docker无法在物理内存不足时运行。