662 Stimmen

Wie kann man in einen bereits laufenden Docker-Container mit einem neuen TTY eintreten?

Ich habe einen Container, der den Apache-Dienst im Vordergrund ausführt. Ich möchte in der Lage sein, auf den Container von einer anderen Shell aus zuzugreifen, um darin zu "herumzustochern" und die Dateien zu untersuchen. Im Moment, wenn ich mich an den Container anhänge, sehe ich nur den Apache-Dämon und kann keine Befehle ausführen.

Ist es möglich, einem laufenden Container einen weiteren tty anzuhängen? Möglicherweise kann ich davon profitieren, dass Docker tatsächlich nur um LXC-Container herumwickelt? Ich habe versucht sudo lxc-console -n [container-id] -t [1-4], aber anscheinend wird nur ein tty zur Verfügung gestellt und das ist das, auf dem der Apache-Dämon läuft. Vielleicht gibt es eine Möglichkeit, während des Builds mehrere lxc-Konsolen zu aktivieren?

Ich würde es lieber nicht konfigurieren und den Container mit einem openssh-Dienst erstellen, wenn möglich.

8voto

solr Punkte 872

Was ist mit dem Ausführen von tmux/GNU Screen innerhalb des Containers? Es scheint der einfachere Weg zu sein, auf so viele vty zuzugreifen, wie Sie möchten, mit:

$ docker attach {Container-ID}

4voto

Pithikos Punkte 16676

nsenter macht das. Allerdings musste ich auch auf einfache Weise einen Container betreten und nsenter reichte nicht aus für meine Bedürfnisse. Es war in einigen Fällen fehlerhaft (schwarzer Bildschirm plus -wd Flag funktionierte nicht). Außerdem wollte ich mich als bestimmter Benutzer und in einem bestimmten Verzeichnis anmelden.

Ich habe schließlich mein eigenes Tool erstellt, um Container zu betreten. Sie finden es unter: https://github.com/Pithikos/docker-enter

Die Verwendung ist so einfach wie

./docker-enter [-u ] [-d ]

3voto

Danstan Punkte 1551
docker exec -t -i container_name /bin/bash

Bringt Sie zur Konsole des Containers.

2voto

Ivailo Bardarov Punkte 3533

Der "nsinit" Weg ist:

nsinit installieren

git clone git@github.com:dotcloud/docker.git
cd docker
make shell

von innerhalb des Containers:

go install github.com/dotcloud/docker/pkg/libcontainer/nsinit/nsinit

von außerhalb:

docker cp id_docker_container:/go/bin/nsinit /root/

verwenden

cd /var/lib/docker/execdriver/native//
nsinit exec bash

1voto

Ahmed Samir Punkte 117

Ich habe PowerShell auf einem laufenden Microsoft/IIS als Daemon gestartet

docker exec -it  powershell

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X