在使用 Docker 容器运行应用时,我们常常需要控制容器所使用的内存,防止单个容器占用过多资源而影响其他服务的运行。本文将介绍如何通过命令行和 Docker Compose 文件来设置内存限制
1. 为什么需要设置内存限制?
Docker 容器默认不限制内存使用。如果某个容器出现内存泄漏或需要大量内存(如alist有时候播放夸克盘资源会占用特别大的内存),会导致宿主机资源耗尽,从而影响系统稳定性。通过设置内存限制,可以:
- 控制容器最大可用内存,避免意外占用太多系统资源。
- 提高系统整体的资源管理和调度能力。
2. 如何确认容器需要多少内存
运行docker stats
可以查看现有容器资源占用情况,持续观察待容器稳定运行后,再预留个20%-30%即可
3. 使用 docker run
命令设置内存限制
在运行容器时,可以通过 -m
或 --memory
参数设置容器的内存上限。--memory-reservation
参数设置内存的软性预留(也称为“保底内存”),表示在系统资源紧张时,这个容器至少能分配到的内存。
1 | docker run -d -m 512m --memory-reservation 256m your_image |
4. 设置Swap限制
除了限制物理内存外,还可以通过 --memory-swap
参数设置容器可使用的 swap 内存大小。这个参数决定了容器最多可以使用多少内存(物理内存 + swap)。
例如,下面的命令将容器物理内存限制设置为 256MB,同时允许最多使用 512MB(包括 256MB 的 swap):
1 | docker run -d -m 256m --memory-swap 512m your_image |
注意:
--memory-swap
的值必须大于或等于-m
设置的内存大小。- 如果希望禁用 swap,可以将
--memory-swap
的值设置与-m
相同,例如:
1 docker run -m 256m --memory-swap 256m your_image- 有些操作系统,如openwrt不支持限制swap,可通过
docker info | grep -i swap
查看,如果看到 “WARNING: No swap limit support” 的提示,则说明 swap 限制未启用
5. 在 Docker Compose 中设置内存限制
1 | version: "3" |
6. 总结
通过设置内存限制,可以有效防止 Docker 容器因内存使用过高而影响宿主机及其他服务的运行。无论是使用 docker run
命令还是 Docker Compose 文件,都可以方便地对容器的内存使用进行管理。希望这篇简单的指南能帮助你在实际项目中合理配置 Docker 资源,提升系统的稳定性和性能。