Docker内存问题:如何调高内存?docker-compose.yml内存限制配置方法
Docker内存配置指南
Hey there! Let's tackle your two Docker memory-related questions one by one.
1. 如何将Docker的内存设置为更高的值?
调整Docker整体可用内存分两种场景:
- Docker Desktop(Windows/macOS):
打开Docker Desktop设置面板,进入Resources->Advanced选项,拖动Memory滑块到你需要的数值,点击Apply & Restart完成设置。 - Linux环境下的Docker Daemon:
编辑(或创建)Docker配置文件/etc/docker/daemon.json,添加以下配置:
其中{ "memory": "4G", "default-shm-size": "2G" }memory指定Docker daemon可使用的最大内存,default-shm-size设置容器默认共享内存大小。修改后重启Docker服务生效:sudo systemctl restart docker
2. 在docker-compose.yml v3中配置容器最大内存限制
在Compose文件版本3中,容器资源限制通过deploy.resources字段配置(该字段原生适配Swarm模式,使用docker-compose up时需添加--compatibility参数启用)。
结合你提供的配置文件,给mysql和backend服务添加内存限制的示例如下:
version: "3" services: mysql: image: "mysql:latest" ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: test deploy: resources: limits: memory: 2G # 容器允许使用的最大内存 reservations: memory: 1G # 容器启动时预留的基础内存 backend: image: "backend:latest" ports: - 19001:19001 - 80:80 - "9001:9000" environment: DB_USERNAME: test DB_PASSWORD: test DB_URL: jdbc:mysql://mysql:3306/test jdbc_url: jdbc:mysql://mysql:3306 JAVA_HOME: "/application/jdk8" links: - "mysql:mysql" deploy: resources: limits: memory: 4G # 根据后端服务实际需求调整 reservations: memory: 2G
关键说明:
limits.memory:容器能使用的内存上限,超过后容器可能被系统OOM Killer终止。reservations.memory:Docker为容器预留的内存资源,确保容器启动时有足够内存可用。- 若不需要适配Swarm模式,也可以沿用Compose v2的语法(直接在服务下添加
mem_limit和mem_reservation字段),但v3版本更推荐使用deploy字段的标准配置方式。 - 启动容器时需加上兼容性参数:
docker-compose up --compatibility -d
内容的提问来源于stack exchange,提问作者Joe




