【问题标题】:"virtual memory exhausted" when building Docker image构建 Docker 映像时“虚拟内存耗尽”
【发布时间】:2017-12-16 09:54:47
【问题描述】:

在构建 Docker 映像时,有一些 C++ 脚本编译,我最终遇到如下错误:

src/amun/CMakeFiles/cpumode.dir/build.make:134: recipe for target 'src/amun/CMakeFiles/cpumode.dir/cpu/decoder/encoder_decoder_state.cpp.o' failed
virtual memory exhausted: Cannot allocate memory

但是在主机上构建相同的.cpp 代码时,它可以正常工作。


经过一番检查,错误消息似乎与人们在 Raspberry Pi 上得到的错误消息相似,https://www.bitpi.co/2015/02/11/how-to-change-raspberry-pis-swapfile-size-on-rasbian/

经过一番谷歌搜索,Mac forum 上的这篇帖子说:

根据需要动态创建交换文件,直到磁盘被 已满,或内核用完页表空间。我不认为你 可以更改 Mac OS X 内核中的页表空间限制。我有 我使用 OS X 这么多年都没见过任何东西。

有没有办法增加 Docker 在 Mac OS 上构建的交换空间?

如果没有,还有什么办法可以克服构建 Docker 镜像时出现的“虚拟内存耗尽”错误?

【问题讨论】:

  • 您需要澄清您在 macos 上使用的 docker 实现。例如,使用 boot2docker,您需要调整授予 virtualbox vm 的内存

标签: c++ macos docker virtual-memory docker-build


【解决方案1】:

这似乎与 XHyve 无关。
如上所述in this thread

我认为 VM 的默认大小是 16GB。即使将 VM 上的内存增加到 16GB,我的交换空间仍然不足。

检查用于 VirtualBox VM 的方法是否适用于 XHyve:请参阅“How to increase the swap space available in the boot2docker virtual machine?”

boot2docker ssh

export SWAPFILE=/mnt/sda1/swapfile
sudo dd if=/dev/zero of=$SWAPFILE bs=1024 count=4194304
sudo mkswap $SWAPFILE
sudo chmod 600 $SWAPFILE
sudo swapon $SWAPFILE

exit

还要检查此Digital Ocean Setup,再次在您的 XHyve 上下文中进行测试。
mkswap is also seen here 或docker-root-xhyve/contrib/makehdd/makehdd.sh。

【讨论】:

    【解决方案2】:

    由于您的主机中有足够的可用内存,我建议您为后面的 Docker VM 分配更多内存。

    如here所述:

    我可以看到您在 OSX 上,它在 Linux 虚拟机上运行 docker。单击任务栏中的鲸鱼图标配置最大内存。默认为 2G。

    更多信息:https://docs.docker.com/docker-for-mac/#memory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2014-04-23
      • 2011-04-12
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多