如何为docker容器分配更多的内存

202

正如标题所述,我正在尝试为我的容器分配更多的内存。我正在使用来自docker hub的名为"aallam/tomcat-mysql"的镜像,以防这是相关的。

当我正常启动它而没有任何特殊标志时,有一个2GB的内存限制(尽管我读到如果没有设置,则内存不受限制)

这是我的docker统计信息

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

我看到有人说可能是虚拟机的限制导致容器大小受限。但是为什么docker stats显示容器大小限制为2GB呢?

4个回答

313
你看到的那个2GB限制是Docker运行的虚拟机(VM)的总内存。如果你使用的是Docker桌面版,你可以通过任务栏中的鲸鱼图标轻松地增加它,然后进入首选项->高级设置: Docker Preferences 但是如果你在VirtualBox后面,打开VirtualBox,选择并配置分配给docker-machine的内存。
Mac操作系统请参考以下内容: https://docs.docker.com/desktop/settings/mac/#advanced

内存 默认情况下,Docker for Mac设置为使用2 GB的运行时内存,从你的Mac上可用内存中分配。你可以通过将此数字设置得更高(例如3)或更低(例如1)来增加应用程序的RAM以获得更快的性能,或者如果你想让Docker for Mac使用较少的内存,则将其设置得更低。

对于Windows系统,请参考以下内容: https://docs.docker.com/desktop/settings/windows/#advanced

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


144
没有GUI怎么做? - Philippe
19
@Philippe,您的使用情况是什么?Docker for Windows或Docker for Mac附带guli。我认为您的情况是在Linux上使用本地Docker(不需要任何虚拟机,这是用于生产系统/云的情况)。在这种情况下,您无需设置VM内存,因为Docker已经占用了整个机器进行使用。 - Robert
11
是的,我后来想通了。所以如果我想让我的Docker容器拥有>4GB的RAM,如果我在Linux上开发,我就不需要做任何事情了? - Philippe
7
这是不可能的,主要是因为您不会为Docker容器分配内存,而是限制容器可以使用多少内存。请注意,本回答并不是关于为容器分配内存,而是关于为运行Docker的虚拟机分配内存。 - Robert
5
如果直接在Linux系统上运行Docker,它将使用所有可用的内存,因此除了物理限制外,没有其他限制。请注意,这是一句简短的翻译,不包含任何解释或其他信息。 - Robert
显示剩余5条评论

31

从(docker preference -> advance)中将最大内存分配给您的docker机器。

高级设置截图:高级设置截图。

这将设置Docker在运行容器时消耗的最大限制。现在使用-m=4g标志在新容器中运行您的映像以获取4 GB或更多的RAM。例如:

docker run -m=4g {imageID}

记得应用内存限制增加的更改。重新启动docker并仔细检查内存限制是否已经增加。这可能是您在docker容器中看不到内存限制增加的因素之一。


根据文档,默认情况下,容器没有资源限制。使用-m选项只会限制容器使用比Docker引擎可用资源更少的资源。如果你希望容器使用所有可用的内存,就不需要使用-m选项。 - undefined

24

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

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start

6

Docker Desktop V3.3.3(Mac)的屏幕截图

Docker桌面菜单下拉列表

Docker桌面首选项


感谢您的回答!它在 bigSur 上对我有效。 - Maxim Kitsenko
在这个窗口中,我有以下信息:"您正在使用WSL 2后端,因此资源限制由Windows管理。您可以在.wslconfig文件中配置分配给WSL 2的内存、CPU和交换空间大小的限制。" - Ilias Machairas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接