Geben Sie einen laufenden Docker-Container mit einem neuen Pseudo-TTY ein

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie ein neues Projekt
  2. Definiere ein Bild
  3. Erstellen Sie ein Bild
  4. Führen Sie einen Container aus
  5. Geben Sie einen laufenden Docker-Container mit dem Befehl docker exec ein
  6. Abschluss
Geben Sie einen laufenden Docker-Container mit einem neuen Pseudo-TTY ein

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
  1. FROM – Dies legt das Basisbild fest, auf dem unser benutzerdefiniertes Bild mit nachfolgenden Anweisungen erstellt wird. Dies muss die erste Anweisung der Datei sein.
  2. 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 Mbochi Njonge avatar David Mbochi Njonge avatar

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

Verwandter Artikel - Docker Container