Geben Sie einen laufenden Docker-Container mit einem neuen Pseudo-TTY ein
- Erstellen Sie ein neues Projekt
- Definiere ein Bild
- Erstellen Sie ein Bild
- Führen Sie einen Container aus
-
Geben Sie einen laufenden Docker-Container mit dem Befehl
docker exec
ein - Abschluss
Container sind ausgeführte Versionen unserer Anwendungen, und auf wichtige Informationen kann nur zugegriffen werden, wenn die Container ausgeführt werden. Beispielsweise möchten wir möglicherweise wissen, wo die Protokolle unseres Containers gespeichert sind.
Um dies zu erreichen, müssen wir in den laufenden Container eintreten, um diese Informationen für diesen bestimmten Container zu erhalten. In diesem Tutorial lernen wir die verschiedenen Ansätze kennen, die wir nutzen können, um einen laufenden Docker-Container mit einem neuen Pseudo-TTY zu betreten.
Erstellen Sie ein neues Projekt
Wir werden die Nginx-Anwendung in allen Beispielen in diesem Tutorial verwenden, um zu zeigen, wie man einen laufenden Container betritt.
Öffnen Sie die WebStorm IDE und wählen Sie Datei > Neu > Projekt
, um ein neues Projekt zu erstellen. Wählen Sie im geöffneten Fenster Leeres Projekt
und ändern Sie den Projektnamen von unbenannt
in docker-enter-container
oder verwenden Sie einen beliebigen Namen.
Drücken Sie abschließend die Schaltfläche Erstellen
, um das Projekt zu generieren.
Erstellen Sie eine Datei namens index.html
unter dem aktuellen Ordner und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
crossorigin="anonymous">
</head>
<body>
<table class="table table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
</tbody>
</table>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
</body>
</html>
In dieser Datei haben wir Bootstrap verwendet, um eine einfache Webseite zu erstellen, die eine Tabelle anzeigt. Dies ist die Seite, die zurückgegeben wird, wenn wir unseren Container ausführen.
Es steht Ihnen frei, den Code zu ändern, um andere Informationen anzuzeigen.
Definiere ein Bild
Erstellen Sie eine Datei namens Dockerfile
und kopieren Sie die folgenden Docker-Anweisungen und fügen Sie sie in die Datei ein.
FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
FROM
– Dies legt das Basisbild fest, auf dem unser benutzerdefiniertes Bild mit nachfolgenden Anweisungen erstellt wird. Dies muss die erste Anweisung der Datei sein.KOPIEREN
- Dies kopiert alle Dateien und Ordner im aktuellen Verzeichnis in das Bilddateisystem. In diesem Fall haben wir alle Dateien und Ordner nach/usr/share/nginx/html
kopiert und diesen Speicherort verwendet, da dies für dieses Image erforderlich ist.
Erstellen Sie ein Bild
Öffnen Sie ein neues Terminalfenster, indem Sie auf Ihrem Computer die Tastenkombination ALT+F12 drücken. Führen Sie dann den folgenden Befehl aus, um ein Image mit dem Tag enter-container
zu erstellen.
~/WebstormProjects/docker-enter-container$ docker build --tag enter-container:latest .
Dieser Befehl führt die Dockerfile
-Anweisungen nacheinander aus, und wir können sehen, wie die Anweisungen im Terminalfenster ausgeführt werden, wie unten gezeigt.
=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:b87c350e6c69e0dc7069093dcda226c4430f3836682af4f649f2af9 0.0s
=> [2/2] COPY . /usr/share/nginx/html
Führen Sie einen Container aus
Führen Sie im selben Terminalfenster den folgenden Befehl aus, der einen Container mit dem Namen enter-container-prod
ausführt.
~/WebstormProjects/docker-enter-container$ docker run --name enter-container-prod -d -p 3000:80 enter-container:latest
Dieser Befehl führt einen Container aus und macht Port 3000 auf dem Host verfügbar, um Port 80 auf dem Container abzuhören. Um die Anwendung anzuzeigen, senden Sie eine Anfrage an localhost:3000
(http://localhost:3000/) im Browser, um die Tabelle auf der Seite index.html
anzuzeigen.
Der folgende Abschnitt verwendet diesen Container, um die verschiedenen Ansätze zu zeigen, die wir verwenden können, um den Container zu betreten.
Geben Sie einen laufenden Docker-Container mit dem Befehl docker exec
ein
Wenn wir einen neuen Befehl in einem laufenden Container ausführen möchten, verwenden wir den Befehl exec
. Beachten Sie, dass dieser Befehl nur ausgeführt wird, wenn der primäre Prozess des Containers ausgeführt wird, und nicht neu gestartet wird, wenn wir den Container neu starten.
Der Befehl wird im Standardverzeichnis ausgeführt, wenn kein Arbeitsverzeichnis mit der Anweisung WORKDIR
angegeben wird. Führen Sie im selben Terminalfenster den folgenden Befehl aus, um den Container aufzurufen, den wir im vorherigen Abschnitt ausgeführt haben.
~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/sh
Ausgang:
/ #
Beachten Sie, dass wir auch ein zusätzliches Flag -it
verwendet haben, das Docker anweist, ein Pseudo-TTY zuzuweisen, das mit den Containern STDIN
verbunden ist, wodurch eine interaktive Shell im Container erstellt wird.
Wenn wir den Befehl ls
ausführen, können wir sehen, dass wir uns im Stammverzeichnis des Containers befinden, wie unten gezeigt.
/ # ls
Ausgang:
bin etc mnt run tmp
dev home opt sbin usr
docker-entrypoint.d lib proc srv var
Wir können den Shell-Befehl /bin/sh
durch sh
ersetzen, wodurch wir eine interaktive Shell im Container erstellen können. Dies ist viel einfacher zu merken und kann wie unten gezeigt verwendet werden.
~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod sh
Verwenden Sie den bash
-Befehl als Alternative zum sh
-Befehl
Wir können den Docker-Befehl exec
mit einer Alternative zum sh
-Befehl namens bash
verwenden. Dieser Befehl ermöglicht es uns auch, eine interaktive Shell im Container zu erstellen.
Der Befehl bash
kann genauso verwendet werden, wie wir den Befehl sh
im vorherigen Beispiel verwendet haben. Beenden Sie die Shell-Sitzung mit STRG+D und führen Sie den folgenden Befehl aus, um mit dem Befehl bash
einen Docker-Container aufzurufen.
~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod /bin/bash
Wir können den Shell-Befehl /bin/bash
durch bash
ersetzen, wodurch wir eine interaktive Shell im Container erstellen können. Dies ist viel einfacher zu merken und kann wie unten gezeigt verwendet werden.
~/WebstormProjects/docker-enter-container$ docker exec -it enter-container-prod bash
Beachten Sie, dass der Shell-Befehl von der auf dem Container installierten Shell abhängt. Einige Container haben zwei Shell-Befehle, während andere nur einen haben.
Abschluss
In diesem Tutorial haben wir verschiedene Ansätze kennengelernt, die wir nutzen können, um einen Docker-Container mit einem neuen Pseudo-TTY zu betreten. Die in diesem Tutorial behandelten Ansätze umfassen die Verwendung des Befehls docker exec
mit den Shell-Befehlen bash
oder sh
.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub