Ik heb een container gemaakt met -d
dus het is niet interactief.
docker run -d shykes/pybuilder bin/bash
Ik zie dat de container is verlaten:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c45e8cc5f0 shykes/pybuilder:latest "bin/bash" 41 minutes ago Exited (0) 2 seconds ago clever_bardeen
Nu wil ik af en toe commando's uitvoeren op de machine en afsluiten. Gewoon om de reactie te krijgen.
Ik heb geprobeerd de machine te starten. Ik heb geprobeerd te koppelen. Ik dacht dat ik run
kon aanroepen met een container, maar dat lijkt niet toegestaan te zijn. Het gebruik van start
lijkt gewoon te draaien en dan snel te bestaan.
Ik'wil graag terug in interactieve modus na het afsluiten.
Ik heb het geprobeerd:
docker attach d6c45e8cc5f0
Maar ik krijg:
2014/10/01 22:33:34 You cannot attach to a stopped container, start it first
Maar als ik het start, gaat het toch weg. Catch 22. Ik kan niet winnen.
In oktober 2014 introduceerde het Docker-team het docker exec
commando: https://docs.docker.com/engine/reference/commandline/exec/
Dus nu kun je elk commando uitvoeren in een draaiende container, gewoon door zijn ID (of naam) te kennen:
docker exec -it <container_id_or_name> echo "Hello from container!"
Merk op dat exec
commando alleen werkt op een draaiende container. Als de container momenteel gestopt is, moet je hem eerst uitvoeren met het volgende commando:
docker run -it -d shykes/pybuilder /bin/bash
Het belangrijkste hier is de -d
optie, die staat voor detached
. Het betekent dat het commando dat je initieel aan de container hebt gegeven (/bin/bash
) op de achtergrond zal worden uitgevoerd en dat de container niet onmiddellijk zal stoppen.
Uw container zal exit gaan als het commando dat u het gaf zal eindigen. Gebruik de volgende opties om het live te houden:
-i
Houd STDIN open, zelfs als het niet verbonden is.-t
Wijs een pseudo-TTY toe.Dus je nieuwe run
commando is:
docker run -it -d shykes/pybuilder bin/bash
Als je wilt koppelen aan een reeds draaiende container:
docker exec -it CONTAINER_ID /bin/bash
In deze voorbeelden wordt /bin/bash
gebruikt als het commando.
Ervan uitgaande dat de image het standaard entrypoint /bin/sh -c
gebruikt, zal het draaien van /bin/bash
onmiddellijk afsluiten in daemon modus (-d
). Als u wilt dat deze container een interactieve shell draait, gebruik dan -it
in plaats van -d
. Als u willekeurige commando's wilt uitvoeren in een container die normaal gesproken een ander proces uitvoert, kunt u nsenter
of nsinit
proberen. Kijk op https://blog.codecentric.de/en/2014/07/enter-docker-container/ voor de details.