docker build 失败 - “无法分配内存”
Posted
技术标签:
【中文标题】docker build 失败 - “无法分配内存”【英文标题】:docker build fails - "cannot allocate memory" 【发布时间】:2015-09-22 15:34:42 【问题描述】:我的 docker 构建失败并出现以下错误:
Untar fork/exec /usr/bin/docker: cannot allocate memory
所以我明白了 - 没有 RAM :) 但我可以清楚地将空闲内存视为交换:
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
所以问题是:为什么“docker build”不使用交换区作为额外的 RAM 并决定终止构建?
【问题讨论】:
tar 文件的大小是多少? @user2915097 它是 200Mb。谢谢 我们能看到 Dockerfile 吗? 【参考方案1】:简单明了。你没记忆了。您必须通过停止应用程序来释放内存。
Swap 通常比实际内存慢一千倍。有很多应用程序会禁止交换数据,例如:
为了性能,数据库通常会强制某些关键数据不可交换。
由于各种原因,内核和驱动程序等低级系统组件不可交换。 (如果磁盘驱动已被交换,如何读取交换磁盘?:D)
Docker 依赖于许多低级原语来运行和操作容器,它们很可能需要有可用的实际内存。因此,当您的物理内存不足时,Docker 将无法运行。
【讨论】:
【参考方案2】:重启 docker 服务。这对我有用
【讨论】:
以上是关于docker build 失败 - “无法分配内存”的主要内容,如果未能解决你的问题,请参考以下文章