Como atribuir mais memória ao contêiner docker


117

Conforme o título é lido, estou tentando atribuir mais memória ao meu contêiner. Estou usando uma imagem do hub docker chamada "aallam / tomcat-mysql" caso seja relevante.

Quando eu inicio normalmente sem nenhum sinalizador especial, há um limite de memória de 2 GB (embora eu tenha lido que a memória é ilimitada se não for definida)

Aqui estão minhas estatísticas do 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

Tentei definir a memória explicitamente dessa forma, mas com os mesmos resultados

docker run -d --memory=10g --memory-swap=-1 -e MYSQL_PASSWORD=password -p 3307:3306 -p 8081:8080 aallam/tomcat-mysql

Eu li que talvez a VM seja o que o está restringindo. Mas então por que as estatísticas do docker mostram que o limite de tamanho do contêiner é de 2 GB?

Respostas:


202

Esse 2GBlimite que você vê é a memória total da VM na qual o docker é executado.

Se você estiver usando docker-for-windows ou docker-for-mac, pode aumentá-lo facilmente a partir do ícone Whale 🐳 na barra de tarefas e ir para Preferências -> Avançado:

Preferências do Docker

Mas se você estiver usando o VirtualBox atrás, abra o VirtualBox, selecione e configure a memória atribuída à máquina docker.

Veja isto para Mac:

https://docs.docker.com/docker-for-mac/#memory

MEMÓRIA Por padrão, o Docker para Mac é configurado para usar 2 GB de memória de tempo de execução, alocada a partir da memória total disponível em seu Mac. Você pode aumentar a RAM no aplicativo para obter um desempenho mais rápido definindo esse número mais alto (por exemplo, para 3) ou menor (para 1) se quiser que o Docker para Mac use menos memória.

Para Windows:

https://docs.docker.com/docker-for-windows/#advanced

Memória - altere a quantidade de memória que o Docker para Windows Linux VM usa


72
Como você faz isso sem o gui?
Philippe

13
@Philippe, qual é o seu caso de uso? Docker para Windows ou docker para Mac vem com guli. Acho que o seu caso tem docker nativo sobre Linux (sem nenhuma máquina virtual, que é o caso de sistemas de produção / nuvem). Nesses casos, você não precisa configurar a memória VM porque o docker tem a máquina de furo para seus usos.
Robert,

10
Sim, descobri isso mais tarde. Então, se eu quiser que meu contêiner do docker tenha> 4 GB de RAM, não preciso fazer nada se desenvolver no Linux?
Philippe

3
Não é possível, principalmente porque você não atribui memória aos contêineres do docker, em vez disso, você limita a quantidade de memória que um contêiner pode usar. Observe que a presente resposta não é sobre atribuir memória a contêineres, mas sim sobre atribuir memória à máquina virtual na qual o docker é executado.
Robert

2
@SiddharthPant, o docker rodando diretamente em uma máquina Linux usará o máximo de memória disponível, portanto, não há limite além do físico.
Robert

21

Alocar o máximo de memória para sua máquina docker de (preferência docker -> avançar)

Captura de tela das configurações avançadas: Captura de tela das configurações avançadas.

Isso definirá o limite máximo de consumo do docker durante a execução de contêineres. Agora execute sua imagem em um novo contêiner com a bandeira -m = 4g para 4 GB de RAM ou mais. por exemplo

docker run -m=4g {imageID}

Lembre-se de aplicar as alterações de aumento do limite de RAM. Reinicie o docker e verifique se o limite de RAM aumentou. Isso pode ser um dos fatores que você não vê o aumento do limite de memória RAM nos contêineres docker.


17

Se você deseja alterar o contêiner padrão e está usando o Virtualbox, pode fazer isso por meio da linha de comando / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.