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无法在物理内存不足时运行。
- 在工作层Elastic Beanstalk泊坞窗容器上缺less供应商目录
- Django +docker到弹性豆茎
- AWS Elastic Beanstalk忽略了我的Dockerrun.aws.json文件
- Elastic Beanstalk和Dockerfile ARG指令
- 如何将docker-compose.yml转换为Django的Dockerrun.aws.json
- AWS BeansTalk公开Docker端口
- 在Elastic Beanstalk / Docker Nginx / PHP-FPM实例中访问客户端IP
- 在AWS EBS microservice docker环境中使用Kafka,以避免丢失用户请求并处理更多并发点击
- 如何在Amazon Elastic Beanstalk单容器Docker环境中运行Rails迁移和种子