Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Increase memory of Docker container with docker-compose on Windows?

On Docker for Windows, I have a simple SQL Server container based on microsoft/mssql-server-windows-developer that is launched with docker-compose up via a simple docker-compose.yaml file.

Is there a way to allocate more than 1GB of memory to this container? I can do it when running the image directly or when I build my image with -m 4GB, but I can't figure out how to do this when using Docker Compose. This container needs more than 1GB of RAM to run properly and all of my research has revealed nothing helpful thus far.

I've looked into the resources configuration option, but that only applies when running under Docker Swarm, which I don't need.

like image 552
Brian Vallelunga Avatar asked Dec 23 '22 18:12

Brian Vallelunga


2 Answers

In docker compose version 2.* you could use the mem_limit option as below

version: '2.4'
services:
  my-svc:
    image: microsoft/mssql-server-windows-developer
    mem_limit: 4G

In docker compose version 3 it is replaced by the resources options which requires docker swarm.

version: '3'
services:
  my-svc:
    image: microsoft/mssql-server-windows-developer
    deploy:
      resources:
        limits:
          memory: 4G

There is a compatibility flag that can be used to translate the deploy section to equivalent version 2 parameters when running docker-compose --compatibility up. However this is not recommended for production deployments

From documentation

docker-compose 1.20.0 introduces a new --compatibility flag designed to help developers transition to version 3 more easily. When enabled, docker-compose reads the deploy section of each service’s definition and attempts to translate it into the equivalent version 2 parameter. Currently, the following deploy keys are translated:

  • resources
  • limits and memory reservations
  • replicas
  • restart_policy

condition and max_attempts All other keys are ignored and produce a warning if present. You can review the configuration that will be used to deploy by using the --compatibility flag with the config command.

We recommend against using --compatibility mode in production. Because the resulting configuration is only an approximate using non-Swarm mode properties, it may produce unexpected results.

like image 51
danielorn Avatar answered Dec 28 '22 11:12

danielorn


Looking for options to set resources on non swarm mode containers?

The options described here are specific to the deploy key and swarm mode. If you want to set resource constraints on non swarm deployments, use Compose file format version 2 CPU, memory, and other resource options. If you have further questions, refer to the discussion on the GitHub issue docker/compose/4513.

You can use the docker-compose file on version 2 instead of version 3. You can use mem_limit (available on version 2) to set the memory limit. So you can use a docker-compose file like this:

version: "2.4"
services:
  sql-server:
    image: microsoft/mssql-server-windows-developer
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=t3st&Pa55word
    mem_limit: 4GB

You can check the memory limit using docker stats.

like image 45
Sebastian Brosch Avatar answered Dec 28 '22 10:12

Sebastian Brosch