You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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_limitmem_reservation字段),但v3版本更推荐使用deploy字段的标准配置方式。
  • 启动容器时需加上兼容性参数:docker-compose up --compatibility -d

内容的提问来源于stack exchange,提问作者Joe

火山引擎 最新活动