Skip to main content

Neuerstellen des Containers in einem Codespace

Sie können den Entwicklungscontainer eines Codespaces, in dem Sie arbeiten, neu erstellen, um Konfigurationsänderungen anzuwenden. Von Zeit zu Zeit kannst du eine vollständige Neuerstellung durchführen.

Informationen zum Neuerstellen des Entwicklungscontainers

Wenn du in einem Codespace arbeitest, ist deine Entwicklungsumgebung ein Docker-Container, der auf einem virtuellen Computer ausgeführt wird. Wenn du Änderungen an der Konfiguration deines Entwicklungscontainers von einem Codespace aus vornimmst, und diese Änderungen auf den aktuellen Codespace anwenden möchtest, musst du den Container neu erstellen.

Wenn Sie den Entwicklungscontainer neu erstellen, beschleunigt GitHub Codespaces standardmäßig den Buildprozess, indem zwischengespeicherte Images aus früheren Builds des Containers wiederverwendet werden. Dies ist in der Regel die schnellste Möglichkeit, Änderungen an deiner Entwicklungscontainerkonfiguration zu implementieren, und zwar aus folgenden Gründen.

  • GitHub Codespaces kann Images in deinem Cache wiederverwenden, anstatt sie erneut aus Containerregistrierungen zu pullen.
  • Die Teile deiner Entwicklungscontainerkonfiguration, die definieren, wie der Container erstellt wird, z. B. Entwicklercontainerfeatures und Dockerfile-Anweisungen, wurden möglicherweise bereits in Imageebenen in deinem Cache implementiert, sodass du nicht warten musst, bis diese Prozesse erneut ausgeführt werden. (Befehle in deiner Konfiguration, die nach dem Erstellen des Containers ausgeführt werden, z. B. onCreateCommand, werden jedoch erneut ausgeführt.)

Gelegentlich kannst du eine vollständige Neuerstellung deines Containers durchführen. Bei einer vollständigen Neuerstellung bereinigt GitHub Codespaces alle Docker-Container, Images und Volumes aus dem Cache und erstellt deinen Container dann mit neu gepullten Images neu. Das gesamte in deiner Konfiguration definierte Setup wird erneut ausgeführt, wodurch neue Imageebenen generiert werden. In Situationen wie der folgenden kannst du nach vielen Iterationen der Neuerstellung deines Containers mit zwischengespeicherten Images eine vollständige Neuerstellung durchführen.

  • Du solltest sicherstellen, dass das in deiner Konfiguration definierte Setup nicht von zwischengespeicherten Images abhängig ist, und wie erforderlich ausgeführt wird, wenn basierend auf der Konfiguration ein neuer Codespace erstellt wird. Beispielsweise kann eine Abhängigkeit aus dem Basisimage entfernt worden sein, seit es zuletzt in deinen Codespace gepullt wurde.
  • Du solltest den von deinem Cache verwendeten Speicherplatz auf dem Datenträger freigeben, wenn bspw. der Speicherplatz auf dem Datenträger knapp ist, oder du die Speichergebühren minimieren möchtest. Dein Imagecache benötigt möglicherweise erheblichen Speicherplatz auf dem Datenträger, wenn du dein Basisimage mehrmals geändert hast, eine große Anzahl iterativer Änderungen an deiner Konfiguration vorgenommen hast oder du mehrere Container mit Docker Compose ausführst.

Neuerstellen eines Containers

Du kannst einen Container in einem Codespace im VS Code-Webclient oder in der Desktopanwendung neu erstellen, oder du kannst die GitHub CLI verwenden.

Neuerstellen des Entwicklungscontainers im Webclient oder in der Desktopanwendung von VS Code

  1. Greife auf VS Code Command Palette mit UMSCHALT+BEFEHL+P (Mac) oder STRG+UMSCHALT+P (Windows/Linux) zu.

  2. Beginnen Sie mit der Eingabe von "Neu erstellen", und wählen Sie Codespaces: Container neu erstellen aus.

    Screenshot: Option "Codespaces: Container neu erstellen" in der Befehlspalette.

  3. Wählen Sie Neu erstellen oder Vollständig neu erstellen im Bestätigungsdialogfeld aus, der geöffnet wird.

  4. Wenn Änderungen an der Konfiguration deines Entwicklungscontainers zu einem Containerfehler führen, wird der Codespace im Wiederherstellungsmodus ausgeführt, und es wird eine Fehlermeldung angezeigt.

    Screenshot einer Meldung, die besagt, dass der Codespace im Wiederherstellungsmodus ausgeführt wird Unterhalb der Meldung befinden die Schaltflächen Abbrechen und Erstellungsprotokoll anzeigen.

    • Klicke auf Erstellungsprotokoll anzeigen, um den Fehler durch das Überprüfen der Erstellungsprotokolle zu diagnostizieren.
    • Aktualisiere deine devcontainer.json-Datei, um die in den Protokollen identifizierten Fehler zu beheben.
    • Erstelle deinen Container neu, um die Änderungen anzuwenden.

Verwenden von GitHub CLI zur Neuerstellung eines Entwicklungscontainers

Wenn Sie eine Entwicklungscontainerkonfiguration außerhalb von VS Code (z. B. auf GitHub oder in einer JetBrains-IDE) geändert haben, können Sie mit der GitHub CLI den Entwicklungscontainer für einen vorhandenen Codespace neu erstellen.

  1. Gib in einem Terminal den folgenden Befehl ein:

    gh codespace rebuild
    

    Deine Codespaces werden aufgelistet.

  2. Verwende die Pfeiltasten auf der Tastatur, um den erforderlichen Codespace zu markieren, und drücke dann die EINGABETASTE.

Für eine vollständige Neuerstellung mit der GitHub CLI kannst du den Befehl gh codespace rebuild --full verwenden.

Eine Neuerstellung übergreifendes Beibehalten von Daten

Wenn du einen Codespace erstellst, wird dein Repository in das /workspaces-Verzeichnis deines Codespace geklont. Es handelt sich um ein persistentes Verzeichnis, das in den Container eingebunden wird. Alle Änderungen, die du in diesem Verzeichnis vornimmst, einschließlich dem Bearbeiten, Hinzufügen oder Löschen von Dateien, werden beibehalten, wenn du den Codespace beendest und startest oder wenn du den Container im Codespace neu erstellst.

Außerhalb des /workspaces-Verzeichnisses hat Ihr Codespace eine Linux-Verzeichnisstruktur, die abhängig vom Dev-Containerimage variiert, das zum Erstellen Ihres Codespace verwendet wird. Sie können Dateien hinzufügen oder Änderungen an Dateien außerhalb des Verzeichnisses /workspaces vornehmen. Sie können beispielsweise neue Programme installieren oder die Shell-Konfiguration in einer Datei einrichten wie z. B. ~/.bashrc. Als Nicht-Root-Benutzer*in hast du möglicherweise nicht automatisch Schreibzugriff auf bestimmte Verzeichnisse, aber die meisten Images lassen den Root-Zugriff auf diese Verzeichnisse mit dem sudo-Befehl zu.

Außerhalb von /workspaces sind die Verzeichnisse in einem Codespace mit Ausnahme des /tmp-Verzeichnisses an den Lebenszyklus des Containers gebunden. Das bedeutet, dass alle Änderungen, die Sie vornehmen, beibehalten werden, wenn Sie den Codespace beenden und starten, aber nicht, wenn Sie den Container neu erstellen.

Wenn Daten außerhalb des Verzeichnisses /workspaces eine Neuerstellung übergreifend beibehalten werden sollen, kannst du eine symbolische Verknüpfung (Symlink) mit dem persistenten Verzeichnis am gewünschten Speicherort innerhalb des Containers erstellen. Du kannst z. B. in deinem /workspaces/.devcontainer-Verzeichnis ein config-Verzeichnis erstellen, das bei einer Neuerstellung beibehalten wird. Anschließend erstellst du eine symbolische Verknüpfung für das config-Verzeichnis und seinen Inhalt als postCreateCommand in deiner devcontainer.json-Datei.

{
    "image": "mcr.microsoft.com/devcontainers/base:alpine",
    "postCreateCommand": "chmod +x .devcontainer/postCreate.sh && .devcontainer/postCreate.sh"
}

In der nachstehenden Beispieldatei postCreate.sh werden die Inhalte des config-Verzeichnisses symbolisch mit dem Basisverzeichnis verknüpft.

#!/bin/bash
ln -sf $PWD/.devcontainer/config $HOME/config && set +x

Weiterführende Themen