Ich fange an, mit Docker zu arbeiten. Ich benutze das WordPress-Basis-Image und Docker-Compose.
Ich versuche, in einen der Container zu ssh, um die Dateien / Verzeichnisse zu überprüfen, die während des ersten Builds erstellt wurden. Ich habe versucht zu rennen docker-compose run containername ls -la
, aber das hat nichts gebracht. Selbst wenn dies der Fall wäre, hätte ich lieber eine Konsole, in der ich die Verzeichnisstruktur durchlaufen kann, anstatt einen einzelnen Befehl auszuführen. Was ist der richtige Weg, um dies mit Docker zu tun?
docker
docker-container
Andrew
quelle
quelle
docker exec
askubuntu.com/a/543057/35816 . Holen Sie sich die Container-ID mitdocker ps
sudo docker run -it --entrypoint /bin/bash <container_name>
bringt Sie interaktiv in den Container. Dann kann man das Dateisystem im Container mitcd <path>
Antworten:
docker attach
Sie können eine Verbindung zu Ihrem Docker-Container herstellen, dies ist jedoch nicht das Gleiche wiessh
. Wenn in Ihrem Container beispielsweise ein Webserver ausgeführt wird,docker attach
werden Sie wahrscheinlich mit dem Standard des Webserverprozesses verbunden. Es wird Ihnen nicht unbedingt eine Muschel geben.Der
docker exec
Befehl ist wahrscheinlich das, wonach Sie suchen. Auf diese Weise können Sie beliebige Befehle in einem vorhandenen Container ausführen. Zum Beispiel:Natürlich muss jeder Befehl, den Sie ausführen, im Container-Dateisystem vorhanden sein.
Im obigen Befehl
<mycontainer>
steht der Name oder die ID des Zielcontainers. Es spielt keine Rolle, ob Sie verwenden oder nichtdocker compose
; Führen Sie einfach ausdocker ps
und verwenden Sie entweder die ID (eine hexadezimale Zeichenfolge, die in der ersten Spalte angezeigt wird) oder den Namen (angezeigt in der letzten Spalte). ZB gegeben:Ich kann rennen:
Ich könnte das Gleiche erreichen, indem ich renne:
Ebenso könnte ich eine Shell im Container starten;
quelle
docker exec
nur beim Ausführen von Containern (anderweitig verwendendocker run -it --entrypoint /bin/bash
oder ähnlich).-it
ist eine Kombination aus-i
und-t
das ist--interactive
( „Keep öffnen STDIN auch wenn sie nicht angebracht“) bzw.--tty
( „ein Pseudo-TTY Weisen“).docker run -it --entrypoint /bin/bash <imageid> --any --more --args
, nur um für die Menschen zu klären--any --more --args
Sie haben, in das eingespeist, was das Bild als seinCMD
und nicht als Docker definiert hat (oder wenn Ihr Bild nur einENTRYPOINT
und nein definiertCMD
, werden diese Optionen/bin/bash
wie hier angegeben eingespeist ). So müssen zum Beispiel alle anderendocker run
Optionen (z. B.--net "host"
) vor dem stehen<imageid>
.Geben Sie Folgendes ein, um in einen laufenden Container zu schlagen:
oder
oder
quelle
docker exec -it
anstattdocker exec -t -i
Nehmen wir an, Sie möchten aus eigenen Gründen wirklich SSH verwenden. Es dauert ein paar Schritte, aber es kann getan werden. Hier sind die Befehle, die Sie im Container ausführen würden, um ihn einzurichten ...
Jetzt können Sie sogar grafische Anwendungen (sofern sie im Container installiert sind) mithilfe der X11-Weiterleitung an den SSH-Client ausführen:
Hier sind einige verwandte Ressourcen:
quelle
Wenn Sie hier nach einer Docker Compose-spezifischen Antwort suchen, wie ich es war, bietet sie eine einfache Möglichkeit, ohne die generierte Container-ID nachschlagen zu müssen.
docker-compose exec
Nimmt den Namen des Dienstes gemäß Ihrerdocker-compose.yml
Datei.Um eine Bash-Shell für Ihren "Web" -Dienst zu erhalten, haben Sie folgende Möglichkeiten:
quelle
docker-compose run
funktioniert auch, wenn Ihr Container noch nicht existiert.Hinweis : Diese Antwort bewirbt ein Tool, das ich geschrieben habe.
Ich habe einen containerisierten SSH-Server erstellt, an den Sie sich an jeden laufenden Container halten können. Auf diese Weise können Sie mit jedem Container Kompositionen erstellen. Die einzige Voraussetzung ist, dass der Container Bash hat.
Im folgenden Beispiel wird ein SSH-Server gestartet, der an einen Container mit dem Namen "my-container" angeschlossen ist.
Wenn Sie eine Verbindung zu diesem SSH-Dienst herstellen (mit dem SSH-Client Ihrer Wahl), wird im Container eine Bash-Sitzung mit dem Namen "my-container" gestartet.
Weitere Hinweise und Dokumentationen finden Sie unter: https://github.com/jeroenpeeters/docker-ssh
quelle
less
zeigte jedes Mal eine Warnung an, wenn ich ihn ausführte usw. Die Verwendung von Jeroens Container bietet mir bisher eine viel bessere Erfahrung. Lesen Sie einfach die Dokumentation . Der Beispielbefehl in der Antwort scheint nicht mehr gültig zu sein.Wenn Sie Docker unter Windows verwenden und Shell-Zugriff auf einen Container erhalten möchten, verwenden Sie Folgendes:
Höchstwahrscheinlich haben Sie Git Bash bereits installiert. Wenn Sie dies nicht tun, stellen Sie sicher, dass Sie es installieren.
quelle
Wenn der Container bereits beendet wurde (möglicherweise aufgrund eines Fehlers), können Sie dies tun
oder
oder
um einen neuen Container zu erstellen und eine Shell hinein zu bekommen. Da Sie --rm angegeben haben, wird der Container beim Verlassen der Shell gelöscht.
quelle
In einigen Fällen kann Ihr Bild auf Alpen basieren. In diesem Fall wird es werfen:
Weil
/bin/bash
es nicht existiert. Stattdessen sollten Sie Folgendes verwenden:oder
quelle
SSH in einen Docker-Container mit diesem Befehl:
quelle
Verwenden Sie zum Herstellen einer Verbindung zu cmd in einem Windows-Container
Wobei d8c25fde2769 die Container-ID ist.
quelle
Es ist einfach !
Listen Sie alle Ihre Docker-Bilder auf:
Auf meinem System zeigte es die folgende Ausgabe:
Ich habe zwei Docker-Images auf meinem PC. Angenommen, ich möchte den ersten ausführen.
Dadurch erhalten Sie die Terminalsteuerung des Containers. Jetzt können Sie alle Arten von Shell-Operationen im Container ausführen. Wie dabei
ls
werden alle Ordner im Stammverzeichnis des Dateisystems ausgegeben.quelle
Führen Sie
docker run -it <image> /bin/sh
zum Überprüfen von Dateien ein interaktives Terminal aus. Die Liste der Bilder erhalten Sie vondocker images
. Im Gegensatz zudocker exec
dieser Lösung funktioniert dies auch, wenn ein Image nicht gestartet wird (oder sofort nach dem Ausführen beendet wird).quelle
GOINSIDE-LÖSUNG
Installieren Sie das
goinside
Befehlszeilentool mit:und gehen Sie in einen Docker-Container mit einer geeigneten Terminalgröße mit:
alte Antwort
Wir haben diesen Ausschnitt eingefügt
~/.profile
:Dies ermöglicht nicht nur jedem, in einen laufenden Container zu gelangen, mit:
Es löst auch ein langlebiges Problem mit festen Docker-Containerterminalgrößen . Was sehr ärgerlich ist, wenn Sie sich dem stellen.
Wenn Sie dem Link folgen , haben Sie auch die Befehlsvervollständigung für Ihre Docker-Containernamen.
quelle
Oder je nach Shell kann es sein
Sie können die Container-ID per
docker ps
Befehl erhalten-i
= interaktiv-t
= ein Pseudo-TTY zuweisenquelle
Ich habe eine Terminalfunktion erstellt, um den Zugriff auf das Terminal des Containers zu erleichtern. Vielleicht ist es auch für euch nützlich:
Das Ergebnis ist also, anstatt zu tippen:
du wirst schreiben:
Fügen Sie Folgendes in Ihr ~ / .bash_profile ein (oder was auch immer für Sie funktioniert), öffnen Sie ein neues Terminalfenster und genießen Sie die Verknüpfung:
quelle
Sie können mit dem Terminal im Docker-Container interagieren, indem Sie die Option -ti übergeben
-t steht für Terminal -i steht für interaktiv
quelle
docker exec
wird definitiv eine Lösung sein. Eine einfache Möglichkeit, mit der von Ihnen gestellten Frage zu arbeiten, besteht darin , das Verzeichnis in Docker in das Verzeichnis des lokalen Systems einzubinden .Damit Sie die Änderungen im lokalen Pfad sofort anzeigen können.
quelle
Verwenden:
Der andere Weg, obwohl eine Gefahr besteht, ist die Verwendung
attach
. Wenn Sie jedoch Ctrl+ Cdie Sitzung beenden, stoppen Sie auch den Container. Wenn Sie nur sehen möchten, was passiert, verwenden Siedocker logs -f
.quelle
Verwenden Sie diesen Befehl:
quelle
Wenn Sie Docker mit installiert haben
Kitematic
, können Sie die GUI verwenden. Öffnen SieKitematic
über das Docker-Symbol undKitematic
wählen Sie im Fenster Ihren Container aus. Klicken Sie dann aufexec
Symbol.Sie können das Containerprotokoll und viele Containerinformationen (auf der Registerkarte Einstellungen) auch in dieser GUI sehen.
quelle
In meinem Fall muss ich aus irgendeinem Grund alle Netzwerkinformationen in jedem Container überprüfen. Die folgenden Befehle müssen also in einem Container gültig sein ...
Ich habe all diese Antworten durchgesehen, keine war hilfreich für mich. Ich habe Informationen auf anderen Websites gesucht. Ich werde hier keinen Super-Link hinzufügen, da er nicht auf Englisch geschrieben ist. Deshalb habe ich diesen Beitrag mit einer zusammenfassenden Lösung für Personen erstellt, die dieselben Anforderungen wie ich haben.
Angenommen, Sie haben einen laufenden Container mit dem Namen light-test. Folgen Sie den unteren Schritten.
docker inspect light-test -f {{.NetworkSettings.SandboxKey}}
. Dieser Befehl erhält eine Antwort wie/var/run/docker/netns/xxxx
.ln -s /var/run/docker/netns/xxxx /var/run/netns/xxxx
. Das Verzeichnis ist möglicherweise nicht vorhandenmkdir /var/run/netns
.ip netns exec xxxx ip addr show
, um die Netzwerkwelt im Container zu erkunden.PS.
xxxx
ist immer der gleiche Wert, der vom ersten Befehl empfangen wurde. Und natürlich sind alle anderen Befehle gültig, dhip netns exec xxxx netstat -antp|grep 8080
.quelle
Eine andere Option ist die Verwendung von nsenter .
quelle
nsenter
. Das erste ist, dass Sie physischen Zugriff auf den Docker-Host haben müssen, was nicht selbstverständlich ist (möglicherweise arbeiten Sie mit einer Remote-Docker-API).nsenter
Wenn Sie unter ausgeführt werden, sind Sie außerdem von mehreren Sicherheits- und Ressourcenbeschränkungen befreit, die Docker eingeführt hat (die je nach Umgebung ein Vorteil oder ein Nachteil sein können).docker exec
diese Tage verwenden soll.docker exec
.docker exec
sieht für mich eleganter aus.Wenn Sie Docker Compose verwenden, gelangen Sie in einen Docker-Container.
Innerhalb des Containers gelangen Sie zu WORKDIR, das in der Docker-Datei definiert ist. Sie können Ihr Arbeitsverzeichnis ändern durch
quelle
Im
test
Folgenden werden die folgenden Befehle zum Ausführen in einen laufenden Container mit dem Namen ausgeführtWenn der Container eine
bash
Schale hatWenn der Container eine
bourne
Hülle hat und in den meisten Fällen vorhanden istquelle
Für Docker-Compose-Up (Docker4Drupal)
Ich benutze Docker für Drupal auf einem Linux-Laptop. Nachdem ich den Container ausgeführt habe, verwende ich '
docker-compose exec php bash
', um mich mit dem Container zu verbinden, damit ich drush-Kommandos ausführen kann. Es funktioniert gut für mich.quelle