Sök…


Syntax

  • docker stats [OPTIONS] [CONTAINER ...]
  • dockerloggar [OPTIONS] CONTAINER
  • docker top [OPTIONS] CONTAINER [ps OPTIONS]

Gå in i en löpande behållare

För att utföra operationer i en container använder docker exec kommandot docker exec . Ibland kallas detta "in i behållaren" eftersom alla kommandon utförs inuti behållaren.

docker exec -it container_id bash

eller

docker exec -it container_id /bin/sh

Och nu har du ett skal i din körbehållare. Lista till exempel filer i en katalog och lämna sedan behållaren:

docker exec container_id ls -la

Du kan använda -u flag att ange behållaren med en specifik användare, t.ex. uid=1013 , gid=1023 .

docker exec -it -u 1013:1023 container_id ls -la

Uid och gid behöver inte existera i behållaren men kommandot kan resultera i fel. Om du vill starta en behållare och omedelbart ange inuti för att kontrollera något kan du göra

docker run...; docker exec -it $(docker ps -lq) bash

kommandodockaren docker ps -lq matar ut endast id för den sista (l i -lq ) behållaren startade. (detta antar att du har bash som tolk tillgänglig i din behållare, du kan ha sh eller zsh eller något annat)

Övervaka resursanvändning

Att inspektera systemresursanvändning är ett effektivt sätt att hitta felaktiga applikationer. Detta exempel är en motsvarighet till den traditionella top kommando för behållare:

docker stats

För att följa statistiken för specifika containrar, listar dem på kommandoraden:

docker stats 7786807d8084 7786807d8085

Docker-statistik visar följande information:

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

Som standard visar docker stats ID, och det här är inte särskilt användbart, om du föredrar att visa behållarens namn, bara

docker stats $(docker ps --format '{{.Names}}')

Övervakningsprocesser i en container

Att inspektera systemresursanvändning är ett effektivt sätt att begränsa ett problem med en applikation som kör live. Detta exempel är en ekvivalent med det traditionella ps kommandot för containrar.

docker top 7786807d8084

För att filtrera ut formatet, lägg till ps alternativ på kommandoraden:

docker top 7786807d8084 faux

Eller för att få en lista över processer som körs som root, vilket är en potentiellt skadlig praxis:

docker top 7786807d8084 -u root

docker top visar sig särskilt användbart vid felsökning av minimalistiska behållare utan skal eller ps kommandot.

Fäst på en löpande behållare

"Att fästa till en behållare" är att starta en terminalsession i det sammanhang som behållaren (och eventuella program däri) kör. Detta används främst för felsökningsändamål, men kan också behövas om specifik data måste skickas till program som körs i behållaren.

attach används för att göra detta. Den har den här syntaxen:

docker attach <container>

<container> kan vara antingen behållar-ID eller behållarens namn. Till exempel:

docker attach c8a9cf1a1fa8

Eller:

docker attach graceful_hopper

Du kanske måste sudo ovanstående kommandon, beroende på din användare och hur docker är inställd.

Obs: Bifoga tillåter endast en enda skal-session att anslutas till en behållare åt gången.

Varning: all tangentbordsinmatning vidarebefordras till behållaren. Att slå Ctrl-c kommer att döda din behållare.

För att lossa från en ansluten behållare, slå successivt Ctrl-p och sedan Ctrl-q

För att koppla flera skal-sessioner till en behållare, eller helt enkelt som ett alternativ, kan du använda exec . Använda behållar-ID:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Använd behållarens namn:

docker exec -i -t graceful_hopper /bin/bash

exec kommer att köra ett program i en container, i detta fall /bin/bash (ett skal, antagligen ett som behållaren har). -i indikerar en interaktiv session, medan -t tilldelar en pseudo-TTY.

Obs! Till skillnad från bifoga kommer att slå Ctrl-c endast att avsluta exec- kommandot när de kör interaktivt.

Skriva ut loggarna

Att följa loggarna är det mindre påträngande sättet att felsöka en applikation som kör live. Det här exemplet återger beteendet hos den traditionella tail -f some-application.log på behållaren 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Detta kommando visar i princip standardutgången från behållarprocessen (processen med pid 1).

Om dina loggar inte inbegriper tidstämpel, kan du lägga till flaggan för - --timestamps .

Antingen är det möjligt att titta på stockarna i en stoppad container

  • starta den misslyckade behållaren med docker run ... ; docker logs $(docker ps -lq)

  • hitta behållarens id eller namn med

docker ps -a

och då

docker logs container-id eller

docker logs containername

eftersom det är möjligt att titta på stockarna i en stoppad container

Felsökning av Docker-behållare

Docker är bara ett fint sätt att köra en process, inte en virtuell maskin. Därför är felsökning av en process "i en behållare" också möjlig "på värden" genom att helt enkelt undersöka den löpande behållarprocessen som en användare med lämpliga behörigheter för att inspektera dessa processer på värden (t.ex. root). Till exempel är det möjligt att lista varje "containerprocess" på värden genom att köra en enkel ps som root:

sudo ps aux

Alla för närvarande körande Docker-containrar kommer att listas i utgången.

Detta kan vara användbart under applikationsutveckling för felsökning av en process som körs i en container. Som användare med lämpliga behörigheter kan typiska felsökningsverktyg användas i behållarprocessen, såsom strace, ltrace, gdb, etc.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow