Come assegnare più memoria al contenitore docker


117

Mentre il titolo si legge, sto cercando di assegnare più memoria al mio contenitore. Sto usando un'immagine dall'hub docker chiamata "aallam / tomcat-mysql" nel caso sia pertinente.

Quando lo avvio normalmente senza flag speciali, c'è un limite di memoria di 2 GB (anche se ho letto che la memoria è illimitata se non impostata)

Ecco le mie statistiche di 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

Ho provato a impostare la memoria in modo esplicito in questo modo, ma con gli stessi risultati

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

Ho letto che forse la VM è ciò che lo limita. Ma allora perché le statistiche Docker mostrano che il limite delle dimensioni del contenitore è di 2 GB?

Risposte:


203

Il 2GBlimite che vedi è la memoria totale della VM in cui viene eseguita la finestra mobile.

Se stai usando docker-for-windows o docker-for-mac puoi facilmente aumentarlo dall'icona Whale 🐳 nella barra delle applicazioni, quindi vai su Preferenze -> Avanzate:

Preferenze Docker

Ma se stai usando VirtualBox dietro, apri VirtualBox, seleziona e configura la memoria assegnata alla macchina docker.

Vedi questo per Mac:

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

MEMORIA Per impostazione predefinita, Docker per Mac è impostato per utilizzare 2 GB di memoria di runtime, allocata dalla memoria totale disponibile sul Mac. Puoi aumentare la RAM sull'app per ottenere prestazioni più veloci impostando questo numero su un valore più alto (ad esempio 3) o inferiore (su 1) se desideri che Docker per Mac utilizzi meno memoria.

Per Windows:

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

Memoria: modifica la quantità di memoria utilizzata dalla Docker per Windows Linux VM


72
Come fai senza la gui?
Philippe

13
@Philippe, qual è il tuo caso d'uso? Docker per Windows o docker per Mac viene fornito con guli. Penso che il tuo caso abbia una finestra mobile nativa su Linux (senza alcuna macchina virtuale, come nel caso dei sistemi di produzione / cloud). In questi casi non è necessario impostare la memoria della VM perché docker ha la macchina dei buchi per i suoi usi.
Robert,

10
Sì, l'ho capito più tardi. Quindi, se voglio che il mio contenitore Docker abbia> 4 GB di RAM non devo fare nulla se sviluppo su Linux?
Philippe

3
Non è possibile, principalmente perché non si assegna memoria ai contenitori Docker, ma si limita la quantità di memoria che un contenitore può utilizzare. Si noti che la presente risposta non riguarda l'assegnazione della memoria ai contenitori, ma l'assegnazione della memoria alla macchina virtuale in cui viene eseguita la finestra mobile.
Robert il

2
@SiddharthPant, docker in esecuzione direttamente su una macchina Linux utilizzerà quanta memoria è disponibile, quindi non c'è limite oltre a quello fisico.
Robert,

21

Assegna la memoria massima alla tua macchina docker da (preferenza docker -> anticipo)

Screenshot delle impostazioni avanzate: Screenshot delle impostazioni avanzate.

Questo imposterà il limite massimo di consumo del docker durante l'esecuzione dei container. Ora esegui la tua immagine in un nuovo contenitore con il flag -m = 4g per 4 giga di ram o più. per esempio

docker run -m=4g {imageID}

Ricordarsi di applicare le modifiche all'aumento del limite di ram. Riavviare la finestra mobile e ricontrollare che il limite di ram sia aumentato. Questo può essere uno dei fattori per cui non si vede l'aumento del limite di RAM nei container Docker.


17

Se vuoi cambiare il contenitore predefinito e stai usando Virtualbox, puoi farlo tramite la riga di comando / CLI:

docker-machine stop
VBoxManage modifyvm default --cpus 2
VBoxManage modifyvm default --memory 4096
docker-machine start
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.