Guider/Docker använder för mycket minne
Använder Docker för mycket minne på din Mac? Så hittar du containern och sätter ett tak
Kort svar
På en Mac kör Docker alla containrar i en enda virtuell Linux-maskin, så Aktivitetskontroll visar en enda stor process, oftast Virtual Machine Service for Docker, och inte containrarna. För att se vilken container som använder minnet kör du docker stats. För att sätta ett tak för summan sänker du Memory limit i Docker Desktops Settings → Resources → Advanced; standard är hälften av minnet i din Mac. Resource Saver, på samma ställe, stänger av den virtuella maskinen när Docker Desktop är overksam. Vitals, en systemövervakare för Mac, visar varje containers minne, processor, nätverk och portar på fliken Containrar, och stoppar en container från menyraden.
Så hittar du och begränsar Dockers minne
- 01 Öppna Aktivitetskontroll, klicka på Minne och skriv Docker i sökfältet. Den största raden är den virtuella maskinen som kör dina containrar; med Apples Virtualization-ramverk heter den Virtual Machine Service for Docker. com.docker.backend är Docker Desktop själv.
- 02 Kör
docker stats --no-streami Terminal. Varje rad är en container som körs, och MEM USAGE / LIMIT visar vad den använder och det mesta den får använda. - 03 Stoppa det du inte använder:
docker stopföljt av containerns namn, ellerdocker compose downi ett Compose-projekts mapp. - 04 Öppna Docker Desktops Settings → Resources → Advanced och sänk Memory limit till lite över vad
docker statsvisar när det är som mest att göra. Verkställ ändringen; Docker Desktop startar om den virtuella maskinen. - 05 Slå på Resource Saver i samma avsnitt, så att den virtuella maskinen stängs av medan inga containrar körs.
OrbStack, Colima, Rancher Desktop och Podman kör också containrar i en virtuell maskin, var och en med sin egen minnesinställning. För Colima ger colima start --memory 4 den virtuella maskinen 4 GB.
Containrar är en Linux-funktion, så på en Mac kör varje motor dem i en liten virtuell Linux-maskin. macOS ser den maskinen som en enda process och har ingen aning om vilken container i den som använder vad. Det är därför Aktivitetskontroll visar en process med flera gigabyte och inga containrar alls, och därför svaren finns i Dockers egna verktyg. Tabellen nedan kopplar det du ser till vad det är och vad du ska göra.
Vart Dockers minne tar vägen
| Det du ser | Vad det är | Vad du gör |
|---|---|---|
| Virtual Machine Service for Docker, flera GB | Den virtuella Linux-maskinen som kör alla containrar | Sänk Memory limit i Settings → Resources → Advanced |
| com.docker.backend | Docker Desktops egen process | Oftast liten; starta om Docker Desktop om den fortsätter att växa |
| Minnet ligger kvar högt fast inga containrar körs | Den virtuella maskinen håller fortfarande minne som den har använt | Slå på Resource Saver, eller avsluta Docker Desktop |
| En container nära sin gräns | Den behöver mer, eller läcker | docker stats, och en gräns per container |
| Minnet ökar under avbildningsbyggen | Byggen körs i samma virtuella maskin | Normalt; det sjunker när bygget är klart |
Varför Aktivitetskontroll visar en stor Docker-process
Den virtuella maskinen får sitt minne från macOS som vilken app som helst, upp till den Memory limit du har ställt in. Inuti den delar Linux det minnet mellan dina containrar och använder resten till att cacha filer, på samma sätt som macOS. Utifrån ser allt likadant ut: en process som håller mycket minne.
Bara motorn vet hur det är fördelat, och det är det docker stats frågar den om. Kolumnen CPU % där är en andel av den virtuella maskinens processorer, och MEM % är en andel av containerns gräns, eller av hela den virtuella maskinen när containern saknar gräns.
Hur mycket minne du ska ge Docker
Docker Desktop tar hälften av minnet i din Mac som standard: 8 GB på en Mac med 16 GB. En typisk utvecklingsmiljö, en appserver, en databas och en cache, behöver oftast betydligt mindre. Kör din miljö som du brukar, håll koll på summan i docker stats när det är som mest att göra, och ställ in Memory limit en bit över det.
Ställer du den för lågt stoppar Linux i den virtuella maskinen containrar som får slut på minne. Kör docker inspect --format '{{.State.OOMKilled}}' följt av en containers namn: det skriver ut true om det har hänt. Höj gränsen, eller ge den containern en egen gräns så att den inte kan dra med sig de andra.
Sätt en minnesgräns per container
En gräns för en container hindrar en läckande tjänst från att fylla den virtuella maskinen. Med docker run lägger du till --memory 512m. I en Compose-fil ställer du in mem_limit: 512m på tjänsten. Containern stoppas om den går över, och docker stats visar gränsen bredvid användningen.
Varför Docker inte lämnar tillbaka minne
Att stoppa containrar frigör minne inne i den virtuella maskinen, men maskinen lämnar inte alltid tillbaka det till macOS direkt, så dess siffra i Aktivitetskontroll kan ligga kvar högt. Resource Saver lämnar tillbaka allt genom att stänga av maskinen när Docker Desktop är overksam, och den startar igen på några sekunder när en container behöver den. Att avsluta Docker Desktop har samma effekt.
Docker och skivutrymme
Avbildningar, stoppade containrar, volymer och byggcachen ligger i en enda skivavbild som växer medan du arbetar, och på en Mac räknas den till Systemdata. docker system df visar vad varje sort tar. docker system prune tar bort stoppade containrar, oanvända nätverk, hängande avbildningar och byggcachen; lägg till --volumes bara om du är säker på att ingen volym innehåller data du behöver. Disk usage limit, bredvid Memory limit i Docker Desktops inställningar, sätter ett tak för den.
Vad Vitals tillför
Vitals visar det som den virtuella maskinen inte berättar för macOS: minnet för varje container.
- En Containrar-flik med minne, processor, nätverk, skiva och publicerade portar för varje container, med Compose-projekt grupperade
- Kort för den största containern och den som är närmast sin gräns, och ett diagram över minne per container
- Docker Desktop är en rad i applistan med sin virtuella maskin inräknad; klicka på den för att se containrarna inuti
- Containrarna finns också i menyn i menyraden, där ett klick stoppar en container efter att ha frågat. Se så stoppar du Docker-containrar
- Docker Desktop, OrbStack, Colima, Rancher Desktop och Podman
Bra att veta
- Vitals läser containervärden från motorn och startar eller tar aldrig bort containrar. Stoppa är den enda ändring den gör, och bara när du ber om det.
- Fliken visas medan en motor körs.
Frågor som folk ställer
Varför använder Docker så mycket minne på min Mac?
Docker kör containrar i en virtuell Linux-maskin som tar upp till sin Memory limit, som standard hälften av minnet i din Mac. Sänk Memory limit i Settings → Resources → Advanced, och kör docker stats för att se vilken container som använder mest.
Vad är Virtual Machine Service for Docker?
Den virtuella maskin som Docker Desktop kör dina containrar i, när den använder Apples Virtualization-ramverk. Dess minne är allt som containrarna och Linux i den använder, upp till Docker Desktops Memory limit.
Hur begränsar jag Dockers minne på en Mac?
I Docker Desktop öppnar du Settings → Resources → Advanced och sänker Memory limit. För en enskild container använder du docker run --memory 512m, eller mem_limit: 512m i en Compose-fil.
Varför lämnar inte Docker tillbaka minne när jag har stoppat containrar?
Den virtuella maskinen behåller en del minne som den har använt även efter att containrarna har stoppats. Slå på Resource Saver, som stänger av maskinen när Docker Desktop är overksam, eller avsluta Docker Desktop.
Varför använder Virtual Machine Service for Docker så mycket processor?
Oftast är en container upptagen, och docker stats visar vilken. Om processoranvändningen ligger kvar högt utan att några containrar körs avslutar du Docker Desktop, öppnar den igen och uppdaterar den: hög processoranvändning när inget körs har rapporterats som en bugg i vissa versioner av Docker Desktop.
Hur mycket minne ska jag ge Docker på en Mac?
Lite mer än dina containrar använder när det är som mest att göra, vilket docker stats visar. För en typisk utvecklingsmiljö är det ofta 2 till 4 GB, långt under standardvärdet på hälften av datorns minne.
Finns det en app som visar Docker-containrars minne på en Mac?
Vitals har en Containrar-flik med varje containers minne, processor, nätverk, skiva och portar, för Docker Desktop, OrbStack, Colima, Rancher Desktop och Podman. Den kan också stoppa en container från menyraden, efter att ha frågat.
I ordlistan
Fler guider
- Varför är min Mac så långsam
- Vad tömmer batteriet på min Mac
- Vilken app använder min processor eller mitt minne
- Varför går min Mac inte i viloläge
- Chrome använder för mycket minne
- Varför låter fläktarna i min Mac så mycket
- Så styr du fläkthastigheten på en Mac
- Så frigör du RAM på en Mac
- Så stoppar du Docker-containrar
- Volymmixer för Mac
- Alternativ till Aktivitetskontroll
- Alternativ till iStat Menus
- Alternativ till Stats
- Aktivitetshanteraren för Mac
- Bästa systemövervakarna för Mac
- Bästa menyradsövervakarna för Mac
- Bästa volymmixrarna för Mac