如何为Docker容器分配更多内存


117

正如标题所示,我正在尝试为容器分配更多的内存。我正在使用来自docker中心的名为“ aallam / tomcat-mysql”的映像,以防相关。

当我正常启动它而没有任何特殊标志时,内存限制为2GB(即使我读到如果未设置也没有限制)

这是我的码头工人统计数据

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
ba57d6c9e9d2        0.22%               145.6 MiB / 1.952 GiB   7.29%               508 B / 508 B       0 B / 6.91 MB       68

我尝试像这样显式设置内存,但结果相同

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

我读过,也许是VM限制了它。但是,为什么docker stats显示容器大小限制为2GB?

Answers:


203

2GB你看到的极限是在泊坞窗运行虚拟机的内存总量。

如果您使用的是docker-for-windows或docker-for-mac,则可以从任务栏中的Whale🐳图标轻松增加它,然后转到“偏好设置”->“高级”:

Docker首选项

但是,如果您在后面使用VirtualBox,请打开VirtualBox,选择并配置docker-machine分配的内存。

在Mac上查看此:

https://docs.docker.com/docker-for-mac/#memory

内存默认情况下,Mac的Docker设置为使用2 GB的运行时内存,该内存是从Mac上的总可用内存分配的。如果您希望Docker for Mac使用更少的内存,则可以将该数字设置为更高(例如,设置为3)或更低(设置为1),从而增加应用程序上的RAM,以获得更快的性能。

对于Windows:

https://docs.docker.com/docker-for-windows/#advanced

内存-更改Windows Linux VM的Docker使用的内存量


72
没有gui怎么办?
菲利普(Philippe)

13
@Philippe,您的用例是什么?适用于Windows的Docker或适用于Mac的docker带有guli。我认为您的案例是基于Linux的本地docker(没有任何虚拟机,生产系统/云就是这种情况)。在这种情况下,您不需要设置VM内存,因为Docker拥有供使用的打孔机。
罗伯特

10
是的,我稍后才知道。因此,如果我希望Docker容器具有> 4GB的RAM,那么如果我在Linux上进行开发,则不需要执行任何操作?
菲利普(Philippe)

3
这是不可能的,主要是因为您没有为Docker容器分配内存,而是限制了一个容器可以使用多少内存。请注意,当前答案不是关于为容器分配内存,而是关于为运行docker的虚拟机分配内存。
罗伯特

2
@SiddharthPant,直接在Linux机器上运行的docker将使用尽可能多的可用内存,因此除了物理内存外没有其他限制。
罗伯特

21

从(docker偏好-> advance)为docker机器分配最大内存

高级设置的屏幕截图: 高级设置的屏幕截图。

这将设置运行容器时docker消耗的最大限制。现在,在带有-m = 4g标志的新容器中运行4个或更多演出的图像。例如

docker run -m=4g {imageID}

切记应用ram极限增加更改。重新启动docker并再次检查ram限制确实增加了。这可能是您在docker容器中看不到内存限制增加的因素之一。


17

如果要更改默认容器,并且正在使用Virtualbox,则可以通过命令行/ CLI进行操作:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.