Zoeken…


Syntaxis

  • docker statistieken [OPTIES] [CONTAINER ...]
  • docker-logboeken [OPTIES] CONTAINER
  • docker top [OPTIONS] CONTAINER [ps OPTIONS]

Invoeren in een lopende container

Gebruik de opdracht docker exec het docker exec om bewerkingen in een container uit te voeren. Soms wordt dit "het binnengaan van de container" genoemd omdat alle opdrachten in de container worden uitgevoerd.

docker exec -it container_id bash

of

docker exec -it container_id /bin/sh

En nu heb je een schaal in je lopende container. Geef bijvoorbeeld bestanden in een map weer en verlaat de container:

docker exec container_id ls -la

U kunt de -u flag gebruiken om de container met een specifieke gebruiker binnen te gaan, bijvoorbeeld uid=1013 , gid=1023 .

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

De uid en gid hoeven niet in de container te bestaan, maar de opdracht kan fouten veroorzaken. Als u een container wilt starten en meteen naar binnen wilt gaan om iets te controleren, kunt u

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

de opdracht docker ps -lq voert alleen het ID uit van de laatste (de l in -lq ) container die is gestart. (dit veronderstelt dat je bash als tolk beschikbaar hebt in je container, je hebt misschien sh of zsh of een andere)

Gebruik van bronnen controleren

Het inspecteren van het gebruik van systeembronnen is een efficiënte manier om zich misdragende applicaties te vinden. Dit voorbeeld is een equivalent van de traditionele opdracht top voor containers:

docker stats

Om de statistieken van specifieke containers te volgen, geeft u ze op de opdrachtregel op:

docker stats 7786807d8084 7786807d8085

Docker-statistieken tonen de volgende informatie:

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

Standaard geeft docker stats de id van de containers weer, en dit is niet erg handig, als u liever de namen van de container weergeeft, doet u gewoon

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

Bewakingsprocessen in een container

Het inspecteren van het gebruik van systeembronnen is een efficiënte manier om een probleem met een actieve toepassing te beperken. Dit voorbeeld is een equivalent van het traditionele ps commando voor containers.

docker top 7786807d8084

Om de uitvoer te filteren of op te maken, voegt u ps opties toe op de opdrachtregel:

docker top 7786807d8084 faux

Of, om de lijst met processen als root te krijgen, wat een potentieel schadelijke praktijk is:

docker top 7786807d8084 -u root

De opdracht docker top vooral handig bij het oplossen van problemen met minimalistische containers zonder shell of de opdracht ps .

Bevestig aan een lopende container

'Verbinding maken met een container' is het starten van een terminalsessie in de context waarin de container (en alle programma's daarin) wordt uitgevoerd. Dit wordt voornamelijk gebruikt voor het opsporen van fouten, maar kan ook nodig zijn als specifieke gegevens moeten worden doorgegeven aan programma's die in de container worden uitgevoerd.

De opdracht attach wordt gebruikt om dit te doen. Het heeft deze syntaxis:

docker attach <container>

<container> kan de container-ID of de containernaam zijn. Bijvoorbeeld:

docker attach c8a9cf1a1fa8

Of:

docker attach graceful_hopper

Mogelijk moet u sudo de bovenstaande opdrachten, afhankelijk van de gebruiker en hoe havenarbeider is ingesteld.

Opmerking: Bij koppelen kan slechts één shell-sessie tegelijk aan een container worden gekoppeld.

Waarschuwing: alle toetsenbordinvoer wordt doorgestuurd naar de container. Ctrl-c raken zal je container doden .

Om los te koppelen van een bijgevoegde container, drukt u achtereenvolgens op Ctrl-p en vervolgens op Ctrl-q

Als u meerdere shell-sessies aan een container wilt koppelen, of gewoon als alternatief, kunt u exec . De container-ID gebruiken:

docker exec -i -t c8a9cf1a1fa8 /bin/bash

Gebruik de naam van de container:

docker exec -i -t graceful_hopper /bin/bash

exec zal een programma uitvoeren binnen een container, in dit geval /bin/bash (een shell, vermoedelijk een die de container heeft). -i geeft een interactieve sessie aan, terwijl -t een pseudo-TTY toewijst.

Opmerking: in tegenstelling tot attach , zal het raken van Ctrl-c alleen het commando exec beëindigen als het interactief wordt uitgevoerd.

Logboeken afdrukken

Het volgen van de logboeken is de minder ingrijpende manier om een live actieve toepassing te debuggen. Dit voorbeeld reproduceert het gedrag van de traditionele tail -f some-application.log op container 7786807d8084 .

docker logs --follow --tail 10 7786807d8084

Deze opdracht toont in principe de standaarduitvoer van het containerproces (het proces met pid 1).

Als uw logbestanden niet standaard tijdstempels bevatten, kunt u de vlag --timestamps toevoegen.

Het is ook mogelijk om de logboeken van een gestopte container te bekijken

  • start de falende container met docker run ... ; docker logs $(docker ps -lq)

  • zoek de container-ID of -naam met

docker ps -a

en toen

docker logs container-id of

docker logs containername

omdat het mogelijk is om de logboeken van een gestopte container te bekijken

Docker container proces debuggen

Docker is gewoon een chique manier om een proces uit te voeren, geen virtuele machine. Daarom is het debuggen van een proces "in een container" ook mogelijk "op de host" door eenvoudigweg het lopende containerproces te onderzoeken als een gebruiker met de juiste machtigingen om die processen op de host te inspecteren (bijv. Root). Het is bijvoorbeeld mogelijk om elk "containerproces" op de host te vermelden door een eenvoudige ps als root uit te voeren:

sudo ps aux

Alle momenteel actieve Docker-containers worden in de uitvoer vermeld.

Dit kan handig zijn tijdens het ontwikkelen van applicaties voor het debuggen van een proces dat in een container wordt uitgevoerd. Als een gebruiker met de juiste machtigingen kunnen typische hulpprogramma's voor foutopsporing worden gebruikt in het containerproces, zoals strace, ltrace, gdb, enz.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow