Wat is in Docker 1.1.2 (nieuwste) de juiste manier om los te koppelen van een container zonder deze te stoppen?
Dus bijvoorbeeld, als ik probeer:
docker run -i -t foo /bin/bash
ofdocker attach foo
(voor reeds draaiende container)
die me allebei naar een terminal in de container brengen, hoe verlaat ik de terminal van de container zonder deze te stoppen?
exit
en CTR+C
stoppen beide de container.
Antwoord 1, autoriteit 100%
Typ Ctrl+pen vervolgens Ctrl+q. Het zal je helpen om de interactieve modus in de daemon-modus te zetten.
Eenmaal gekoppeld aan een container, kunnen gebruikers deze loskoppelen en laten draaien met behulp van de
CTRL-p CTRL-q
toetsenreeks. Deze reeks ontkoppeltoetsen kan worden aangepast met de eigenschapdetachKeys
. […]
Antwoord 2, autoriteit 37%
Update:zoals vermeld in onderstaande antwoorden Ctrl+p, Ctrl+q kbd>zal nu de interactieve modus in daemon-modus veranderen.
Nou Ctrl+C(of Ctrl+\) zou u moeten loskoppelen van de container, maar het zal de container dodenomdat je hoofdproces een bash is.
Een kleine les over havenarbeider.
De container is geen echt volledig functioneel besturingssysteem. Wanneer u een container uitvoert, neemt het proces dat u start de PID 1 en neemt u de init-kracht aan. Dus wanneer dat proces wordt beëindigd, stopt de daemon de container totdat een nieuw proces wordt gestart (via docker start) (Meer uitleg hierover http://phusion.github.io/baseimage-docker/#intro)
Als je een container wilt die altijd in de ontkoppelde modus draait, raad ik je aan om
docker run -d foo
Met een ssh-server op de container. (de eenvoudigste manier is om de dockerizing openssh-tutorial https://docs.docker.com/engine/ te volgen voorbeelden/running_ssh_service/)
Of u kunt uw container gewoon opnieuw starten via
docker start foo
(het wordt standaard losgekoppeld)
Antwoord 3, autoriteit 32%
Ik heb me hierin verdiept en alle bovenstaande antwoorden zijn gedeeltelijk juist. Het hangt allemaal af van hoe de container wordt gelanceerd. Het komt op het volgende neer wanneer de container werd gelanceerd:
- was een TTY toegewezen (
-t
) - was stdin opengelaten (
-i
)
^P^Q
werkt wel, MAARalleen wanneer -t
en -i
worden gebruikt om te starten de container:
[berto@g6]$ docker run -ti -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
b26e39632351192a9a1a00ea0c2f3e10729b6d3e22f8e0676d6519e15c08b518
[berto@g6]$ docker attach test
# here I typed ^P^Q
read escape sequence
# i'm back to my prompt
[berto@g6]$ docker kill test; docker rm -v test
test
test
ctrl+c
werkt wel, MAARalleen wanneer -t
(zonder-i
) wordt gebruikt om de container te starten:
[berto@g6]$ docker run -t -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
018a228c96d6bf2e73cccaefcf656b02753905b9a859f32e60bdf343bcbe834d
[berto@g6]$ docker attach test
^C
[berto@g6]$
De derde manier om los te maken
Er is echter een manier om los te maken zonder de container te doden; je hebt nog een schil nodig. Samenvattend, dit in een andere shell uitvoeren, losgekoppeld en de container laten draaien met pkill -9 -f 'docker.*attach'
:
[berto@g6]$ docker run -d --name test python:3.6 /bin/bash -c 'while [ 1 ]; do sleep 30; done;'
b26e39632351192a9a1a00ea0c2f3e10729b6d3e22f8e0676d6519e15c08b518
[berto@g6]$ docker attach test
# here I typed ^P^Q and doesn't work
^P
# ctrl+c doesn't work either
^C
# can't background either
^Z
# go to another shell and run the `pkill` command above
# i'm back to my prompt
[berto@g6]$
Waarom? Omdat je het proces doodt dat je met de container verbond, niet de container zelf.
Antwoord 4, autoriteit 8%
Als u "docker attach "container id" doet, komt u in de container.
Om de container te verlaten zonder de container te stoppen, moet u Ctrl+P+Q
invoeren
Antwoord 5, autoriteit 6%
Ik beschouw het antwoord van Ashwin als het meest correcte, mijn oude antwoord staat hieronder.
Ik wil hier nog een optie toevoegen, namelijk om de container als volgt uit te voeren
docker run -dti foo bash
Je kunt dan de container invoeren en bash uitvoeren met
docker exec -ti ID_of_foo bash
Het is niet nodig om sshd te installeren 🙂
Antwoord 6, autoriteit 5%
Probeer CTRL+P,CTRL+Qom de interactieve modus in daemon te zetten.
Als dit niet werkt en je hebt bijgevoegd via docker attach
, kun je loskoppelen door het proces docker attach
te beëindigen.
Een betere manier is om de parameter sig-proxy te gebruiken om te voorkomen dat de CTRL+Cnaar uw container wordt doorgegeven:
docker attach --sig-proxy=false [container-name]
Dezelfde optie is beschikbaar voor de opdracht docker run
.
Antwoord 7, autoriteit 4%
De standaardmanier om los te koppelen van een interactieve container is Ctrl+PCtrl+Q, maar u kan het overschrijven bij het uitvoeren van een nieuwe container of bij het koppelen aan een bestaande container met behulp van de --detach-keys vlag.
Antwoord 8, autoriteit 2%
U kunt de optie --detach-keys
gebruiken wanneer u docker attach
uitvoert om de standaard CTRL+P< te overschrijven /kbd>, CTRL+ Qreeks (dat werkt niet altijd).
Bijvoorbeeld, wanneer u docker attach --detach-keys="ctrl-a" test
uitvoert en u drukt op CTRL+Aje verlaat de container zonder hem te doden.
Andere voorbeelden:
docker attach --detach-keys="ctrl-a,x" test
- druk opCTRL+A
en vervolgens opX
om af te sluitendocker attach --detach-keys="a,b,c" test
- druk opa
, danB
, danC
om af te sluiten
Uittreksel uit de officiële documentatie:
Als je wilt, kun je een overschrijving van de Docker-toetsreeks voor loskoppelen configureren. Dit is handig als de Docker-standaardreeks in strijd is met de toetsenreeks die u voor andere toepassingen gebruikt. Er zijn twee manieren om uw eigen detach-sleutelreeks te definiëren, als een per-container-overschrijving of als een configuratie-eigenschap voor uw gehele configuratie.
Om de volgorde voor een individuele container te negeren, gebruik je de --detach-keys="<sequence>"
vlag met het docker attach commando. Het formaat van de <sequence>
is ofwel een letter [a-Z]
, of de ctrl-
gecombineerd met een van de volgende:
- a-z (een enkele kleine letter )
- @ (at-teken)
- [ (linker haakje)
- \ (twee achterwaartse schuine strepen)
- _ (onderstrepingsteken)
- ^ (caret)
Deze a
, ctrl-a
, X
of ctrl-\\
waarden zijn allemaal voorbeelden van geldige toetsenreeksen. Zie Configuratiebestandssectie.
Opmerking: dit werkt sinds docker-versie 1.10+ (op het moment van dit antwoord is de huidige versie 18.03)
Antwoord 9, autoriteit 2%
Als u alleen de uitvoer van het proces vanuit de container wilt zien, kunt u een eenvoudige docker container logs -f <container id>
doen.
De vlag -f
zorgt ervoor dat de uitvoer van de container followed
wordt en in realtime wordt bijgewerkt. Erg handig voor foutopsporing of monitoring.
Antwoord 10
In Docker-container moet ten minste één proces worden uitgevoerd, dan zal alleen de container de docker-image (ubuntu,httd..etc, wat het ook is) uitvoeren op achtergrond zonder af te sluiten
Bijvoorbeeld in ubuntu docker-afbeelding ,
Als u een nieuwe container wilt maken met de ontkoppelmodus (met achtergrond ten minste op proces),
docker run -d -i -t f63181f19b2f /bin/bash
het zal een nieuwe container maken voor deze afbeelding(ubuntu) id f63181f19b2f
. De container zal in de ontkoppelde modus draaien (op de achtergrond draaiend) op dat moment zal een klein proces tty
bash-shell op de achtergrond draaien. dus de container blijft draaien totdat het bash shell-proces stopt.
Gebruik
. om aan de actieve achtergrondcontainer te bevestigen
docker attach b1a0873a8647
als je de container wilt loskoppelen zonder te verlaten (zonder de bash-shell te doden),
Standaard kunt u ctrl-p,q
gebruiken. het zal uit de container komen zonder de container te verlaten (actieve achtergrond. dat betekent zonder de bash-shell te doden).
U kunt de aangepaste opdracht doorgeven tijdens het koppelen aan de container,
docker attach --detach-keys="ctrl-s" b1a0873a8647
deze keer zal de ctrl-p,q
escape-reeks niet werken. in plaats daarvan werkt ctrl-s
voor het verlaten van de container. u kunt elke sleutel doorgeven, bijv. (ctrl-*)
Antwoord 11
Je kunt het docker cli-proces eenvoudig beëindigen door SEGKILL te verzenden. Als je de container hebt gestart met
docker run -it some/container
Je kunt zijn pid krijgen
ps -aux | grep docker
user 1234 0.3 0.6 1357948 54684 pts/2 Sl+ 15:09 0:00 docker run -it some/container
laten we zeggen dat het 1234 is, je kunt het "loskoppelen" met
kill -9 1234
Het is een beetje een hack, maar het werkt!
Antwoord 12
als je docker op Windows gebruikt, mag je de combinatie 'CTRL + D' gebruiken
Antwoord 13
Oud bericht maar gewoon afsluiten en dan opnieuw starten... het probleem is dat als je op een Windows-machine zit, Ctrl p of Ctrl P verbonden zijn met afdrukken... het verlaten van de container zou geen kwaad moeten doen