Docker
Felsöka en container
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.