Loskoppelen van een Docker-container zonder deze te stoppen?

0
145

Docker-containers hebben een interactieve modus waarmee u uw terminal kunt koppelen’ s invoer- en uitvoerstromen naar het proces van de container. Als u op Ctrl-C drukt, wordt dat
-proces meestal beëindigd, waardoor de container stopt. Hier is om los te koppelen van een sessie zonder de container te stoppen.

Ontkoppelen zonder te stoppen

Docker ondersteunt een toetsenbordcombinatie om gracieus los te koppelen van een container. Druk op Ctrl-P, gevolgd door Ctrl-Q, om de verbinding te verbreken.

Je wordt terug in je shell gedropt, maar het eerder gekoppelde proces blijft in leven, zodat je container blijft draaien. U kunt dit controleren door docker ps te gebruiken om een ​​lijst met actieve containers te krijgen.

Als u op Ctrl-C drukt of het exit-commando uitvoert, wordt het voorgrondproces van de container meestal afgebroken, tenzij het speciaal is geconfigureerd. Een Docker-container moet een actief voorgrondproces hebben; een container zonder één zal de gestopte status ingaan.

De ontkoppelde toetsenbordvolgorde wijzigen

U kunt de ontkoppelvolgorde wijzigen zodat deze overeenkomt uw voorkeur of vermijd een conflict met sneltoetsen die door uw toepassing worden gehonoreerd. Voeg een detachKeys-eigenschap toe aan uw ~/.docker/config.json-bestand om de sleutels op te geven die u wilt gebruiken.

Advertentie

Docker ondersteunt de a-z-tekens en @, ^ en _, symbolen, evenals het linker haakje ([) en twee schuine strepen naar achteren (\). Deze worden allemaal gebruikt in combinatie met de Ctrl-toets; letters kunnen ook afzonderlijk worden gebruikt, zonder Ctrl.

Toetsenreeksen worden uitgedrukt als een door komma's gescheiden lijst:

{ "detachKeys": "Ctrl-d,d" }

Dit voorbeeld zou loskomen van de container wanneer u op Ctrl-D drukt, onmiddellijk gevolgd door de d-toets.

De volgorde per container wijzigen

Naast het wijzigen van uw globale configuratie, accepteert Docker detachKeys-overschrijvingen per container en per bijlage. Voeg de –detach-keys vlag toe aan commando's die kunnen worden gekoppeld aan containerprocessen om een ​​specifieke volgorde in te stellen.

De commando's die dit ondersteunen zijn:

  • docker run

    li>

  • docker start
  • docker exec
  • docker attach

Hier leest u hoe u aan een container bevestigt en vervolgens gebruikt Ctrl-d, gevolgd door een onderstrepingsteken, om los te maken:

docker attach my-container –detach-keys=”Ctrl-d,_”

De vlag –detach-keys gebruikt hetzelfde sleutelreeksformaat als de detachKeys-configuratieoptie. De vlag heft uw docker.json-instelling op; dit overschrijft op zijn beurt Docker's standaard Ctrl-P/Ctrl-Q-reeks.

Detaching When The Keyboard Sequence Won's 8217;t Werk

Soms kunt u een containerproces tegenkomen dat weigert los te koppelen, zelfs wanneer u de toetsenbordvolgorde uitgeeft. Dit kan gebeuren als de invoerstroom van de container niet is aangesloten op uw terminal (-i-vlag) of als er geen pseudo-TTY is toegewezen (-t-vlag). U kunt dit probleem ook tegenkomen als het proces van uw container de volgorde van de ontkoppeltoetsen afhandelt en u dit niet heeft overschreven toen u bijvoegde.

Advertentie

Onder deze omstandigheden is het nog steeds mogelijk om uw terminal los te koppelen van de container. U moet tijdelijk een ander shell-venster openen en dit gebruiken om het docker.attach-proces dat de bijlage actief houdt te beëindigen.

Zoek eerst de proces-ID van het bijlageproces:

ps -ef | grep attach

Gebruik de uitvoer van ps om het docker.attach-proces te identificeren dat u moet doden. De opdracht in de CMD-kolom moet de bijlage identificeren waarnaar u op zoek bent. Noteer het relevante PID-nummer en gebruik het kill-commando om dit proces te beëindigen:

kill -9 <PID>

Je zou moeten zien dat je originele shell loskomt van je Docker-container en terugkeert naar een normale bedrijfstoestand. Je kunt nu de tweede shell sluiten en doorgaan met het gebruiken van de originele.

Deze techniek werkt door het Docker CLI-proces dat de terminal aan de container vastmaakte te doden, niet het proces in de container dat het draaiende houdt. Uw oorspronkelijke terminal wordt weer bruikbaar en de container blijft staan.

Herbevestigen aan uw container

U kunt opnieuw aan containers koppelen met de opdracht docker attach. Dit koppelt automatisch de invoer-, uitvoer- en foutstromen van uw terminal aan de opgegeven container:

docker attach my-container

Alle drie de streams zijn standaard verbonden. U kunt de invoerstroom weglaten door de vlag –no-stdin door te geven. De uitvoer van de container wordt naar uw terminal gestreamd, maar u kunt geen invoer leveren.

Advertentie

Gebruik de toetsenbordvolgorde opnieuw om los te koppelen, of Ctrl-C om het proces en de container te stoppen. Als u Ctrl-C gebruikt of afsluit, zal docker attach de $? variabele in uw shell correct zodat u de afsluitcode van de container kunt inspecteren.

Samenvatting

De juiste manier om los te koppelen van een Docker-container is een redelijk obscure toetsenbordvolgorde die je terug in je shell laat vallen. U kunt deze volgorde aanpassen om de memorabiliteit te vergroten en conflicten met het toetsenbord van uw container te voorkomen.

Sequenties voor het loskoppelen van het toetsenbord kunnen in sommige omstandigheden niet effectief zijn. Het is nog steeds mogelijk om los te komen van uw container door het proces dat de bevestiging ondersteunt te identificeren en te doden. Normale Unix-commando's zoals ps en kill zouden in dit scenario moeten worden gebruikt.

Ten slotte, als u wilt dat uw container permanent wordt losgekoppeld, start u deze met de vlag -d (docker run -d my-image: laatste). Hierdoor wordt de container rechtstreeks naar de achtergrond gestuurd en wordt er geen uitvoer naar uw shell verzonden. Losgemaakte containers zijn altijd zichtbaar met het commando docker ps en kunnen worden gestopt met docker stop my-container.