ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Tipps und Tricks für Dev-Container

Dieser Artikel enthält einige Tipps und Tricks, um die Dev Containers-Erweiterung in verschiedenen Umgebungen schnell einsatzbereit zu machen.

Alternative Möglichkeiten zur Installation von Docker

Sie können Docker mit der Dev Containers-Erweiterung auf verschiedene Weise verwenden, darunter:

  • Lokal installiertes Docker.
  • Docker, das in einer entfernten Umgebung installiert ist.
  • Andere Docker-kompatible CLIs, die lokal oder remote installiert sind.

Weitere Informationen finden Sie im Dokument zu alternativen Docker-Optionen.

KI-Chat-Antworten anpassen

Benutzerdefinierte Anweisungen ermöglichen es Ihnen, gängige Richtlinien oder Regeln zu beschreiben, um Antworten zu erhalten, die Ihren spezifischen Programmierpraktiken und Ihrem Tech-Stack entsprechen.

Sie können benutzerdefinierte Anweisungen mit Dev-Containern verwenden, um Copilot weitere Informationen über die Art des Dev-Containers zu geben, mit dem Sie verbunden sind (z. B. welche Sprachen oder Toolchains installiert sind). Dies können Sie auf verschiedene Arten erreichen:

  • Fügen Sie "github.copilot.chat.codeGeneration.instructions" direkt in Ihre devcontainer.json ein.
    • Wir veröffentlichen Dev-Container-Ressourcen (wie Images und Features), um den Prozess der Erstellung und Verbindung mit Dev-Containern noch einfacher zu gestalten. In diesen Dateien sind nun auch benutzerdefinierte Anweisungen enthalten.
    • Hier finden Sie ein Beispiel für benutzerdefinierte Anweisungen im Python-Feature.
  • Verwenden Sie eine copilot-instructions.md-Datei, genau wie Sie es lokal tun würden.

Docker Desktop für Windows: Tipps

Docker Desktop für Windows funktioniert in den meisten Setups gut, aber es gibt ein paar "Stolpersteine", die Probleme verursachen können. Hier sind einige Tipps, um sie zu vermeiden:

  1. Erwägen Sie die Verwendung des neuen Docker WSL 2-Backends unter Windows 10 (2004+). Wenn Sie das WSL 2-Backend von Docker Desktop verwenden, können Sie es sowohl zum Öffnen von Ordnern innerhalb von WSL als auch lokal verwenden. Container werden auch zwischen Windows und WSL geteilt, und diese neue Engine ist weniger anfällig für Probleme mit der Dateifreigabe. Details finden Sie in der Schnellstartanleitung.

  2. Schalten Sie den "Linux Containers on Windows (LCOW)"-Modus aus. Obwohl standardmäßig deaktiviert, unterstützen neuere Versionen von Docker Linux-Container unter Windows (LCOW), die es Ihnen ermöglichen, sowohl Windows- als auch Linux-Container gleichzeitig zu verwenden. Dies ist jedoch eine neue Funktion, so dass Sie auf Probleme stoßen können und die Dev Containers-Erweiterung derzeit nur Linux-Container unterstützt. Sie können den LCOW-Modus jederzeit verlassen, indem Sie mit der rechten Maustaste auf das Docker-Symbol in der Taskleiste klicken und im Kontextmenü Linux-Container umschalten... auswählen.

  3. Stellen Sie sicher, dass Ihre Firewall es Docker erlaubt, ein freigegebenes Laufwerk einzurichten. Docker muss sich nur zwischen zwei lokalen IP-Adressen von Maschinen verbinden, aber einige Firewall-Programme können die Freigabe von Laufwerken oder die benötigten Ports dennoch blockieren.

Hier sind einige Tipps, die für ältere Versionen von Docker für Windows galten, aber inzwischen behoben sein sollten. Wenn Sie auf seltsames Verhalten aufgrund einer möglichen Regression stoßen, haben diese Tipps in der Vergangenheit Probleme gelöst.

  1. Verwenden Sie ein AD-Domänenkonto oder ein lokales Administratorkonto, wenn Sie Laufwerke freigeben. Verwenden Sie kein AAD-Konto (E-Mail-basiert). AAD-Konten (E-Mail-basiert) haben bekannte Probleme, wie in den Docker-Issues #132 und #1352 dokumentiert. Wenn Sie unbedingt ein AAD-Konto verwenden müssen, erstellen Sie ein separates lokales Administratorkonto auf Ihrem Computer, das Sie ausschließlich für die Freigabe von Laufwerken verwenden. Befolgen Sie die Schritte in diesem Blogbeitrag, um alles einzurichten.

  2. Bleiben Sie bei alphanumerischen Passwörtern, um Probleme mit der Laufwerkfreigabe zu vermeiden. Wenn Sie aufgefordert werden, Ihre Laufwerke unter Windows freizugeben, werden Sie nach dem Benutzernamen und dem Passwort eines Kontos mit Administratorrechten auf dem Computer gefragt. Wenn Sie vor einer falschen Benutzer- oder Passworteingabe gewarnt werden, kann dies an Sonderzeichen im Passwort liegen. Zum Beispiel sind !, [ und ] dafür bekannt, Probleme zu verursachen. Ändern Sie Ihr Passwort in alphanumerische Zeichen, um das Problem zu beheben. Weitere Informationen finden Sie in diesem Issue zu Docker-Volume-Mount-Problemen.

  3. Verwenden Sie Ihre Docker-ID zur Anmeldung bei Docker (nicht Ihre E-Mail-Adresse). Die Docker CLI unterstützt nur die Verwendung Ihrer Docker-ID. Daher kann die Verwendung Ihrer E-Mail-Adresse Probleme verursachen. Weitere Informationen finden Sie in Docker Issue #935.

Wenn Sie weiterhin Probleme haben, lesen Sie die Fehlerbehebungsanleitung für Docker Desktop unter Windows.

Datei-Freigabe in Docker Desktop aktivieren

Die Dev Containers-Erweiterung von VS Code kann Ihren Quellcode nur dann automatisch in einen Container einbinden, wenn sich Ihr Code in einem Ordner oder Laufwerk befindet, das mit Docker freigegeben ist. Wenn Sie einen Dev-Container von einem nicht freigegebenen Speicherort aus öffnen, wird der Container erfolgreich gestartet, aber der Arbeitsbereich ist leer.

Beachten Sie, dass dieser Schritt mit dem WSL 2-Engine von Docker Desktop nicht erforderlich ist.

So ändern Sie die Einstellungen für die Freigabe von Laufwerken und Ordnern in Docker:

Windows

  1. Klicken Sie mit der rechten Maustaste auf das Docker-Symbol in der Taskleiste und wählen Sie Einstellungen.
  2. Gehen Sie zu Ressourcen > Dateifreigabe und aktivieren Sie das/die Laufwerk(e), auf dem/denen sich Ihr Quellcode befindet.
  3. Wenn Sie eine Meldung sehen, dass Ihre lokale Firewall die Freigabe blockiert, lesen Sie diesen Docker KB-Artikel für die nächsten Schritte.

macOS

  1. Klicken Sie auf das Symbol in der Menüleiste von Docker und wählen Sie Einstellungen.
  2. Gehen Sie zu Ressourcen > Dateifreigabe. Stellen Sie sicher, dass der Ordner, der Ihren Quellcode enthält, unter einem der aufgeführten freigegebenen Ordner aufgeführt ist.

Probleme mit Git-Zeilenumbrüchen in Containern beheben (führt zu vielen geänderten Dateien)

Da Windows und Linux unterschiedliche Standard-Zeilenenden verwenden, meldet Git möglicherweise eine große Anzahl von geänderten Dateien, die keine Unterschiede außer ihren Zeilenenden aufweisen. Um dies zu verhindern, können Sie die Konvertierung von Zeilenenden mit einer .gitattributes-Datei oder global auf der Windows-Seite deaktivieren.

Normalerweise ist das Hinzufügen oder Ändern einer .gitattributes-Datei in Ihrem Repository der zuverlässigste Weg, dieses Problem zu lösen. Das Übertragen dieser Datei in die Quellcodeverwaltung hilft anderen und ermöglicht es Ihnen, das Verhalten je nach Repository nach Bedarf zu variieren. Fügen Sie zum Beispiel Folgendes zu einer .gitattributes-Datei am Stammverzeichnis Ihres Repositorys hinzu, um alles auf LF zu erzwingen, außer Windows-Batch-Dateien, die CRLF erfordern:

* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf

Beachten Sie, dass dies unter Git v2.10+ funktioniert. Wenn Sie also Probleme haben, stellen Sie sicher, dass Sie einen aktuellen Git-Client installiert haben. Sie können weitere Dateitypen in Ihrem Repository, die CRLF erfordern, zu derselben Datei hinzufügen.

Wenn Sie weiterhin standardmäßig Unix-Zeilenenden (LF) hochladen möchten, können Sie die input-Option verwenden.

git config --global core.autocrlf input

Wenn Sie die Konvertierung von Zeilenenden vollständig deaktivieren möchten, führen Sie stattdessen Folgendes aus:

git config --global core.autocrlf false

Schließlich müssen Sie das Repository möglicherweise erneut klonen, damit diese Einstellungen wirksam werden.

Vermeiden Sie die Einrichtung von Git in einem Container bei Verwendung von Docker Compose

Informationen zur Behebung dieses Problems finden Sie unter Git-Anmeldeinformationen mit Ihrem Container teilen im Hauptartikel zu Containern.

Hänger bei Git-Push oder Sync von einem Container beheben

Wenn Sie ein Git-Repository über SSH klonen und Ihr SSH-Schlüssel eine Passphrase hat, können die Push- und Synchronisierungsfunktionen von VS Code beim Ausführen in der Ferne hängen.

Verwenden Sie entweder einen SSH-Schlüssel ohne Passphrase, klonen Sie über HTTPS oder führen Sie git push über die Befehlszeile aus, um das Problem zu umgehen.

Fehler wegen fehlender Linux-Abhängigkeiten beheben

Einige Erweiterungen hängen von Bibliotheken ab, die in bestimmten Docker-Images nicht gefunden werden. Weitere Optionen zur Behebung dieses Problems finden Sie im Artikel Container.

Container in Docker Desktop beschleunigen

Standardmäßig gibt Docker Desktop Containern nur einen Bruchteil Ihrer Maschinenkapazität. In den meisten Fällen ist dies ausreichend, aber wenn Sie etwas tun, das mehr Kapazität erfordert, können Sie Speicher, CPU oder Festplattenspeicher erhöhen.

Versuchen Sie zuerst, laufende Container zu stoppen, die Sie nicht mehr benötigen.

Wenn dies Ihr Problem nicht löst, sollten Sie prüfen, ob die CPU-Auslastung tatsächlich das Problem ist oder ob etwas anderes vor sich geht. Eine einfache Möglichkeit, dies zu überprüfen, ist die Installation der Resource Monitor-Erweiterung. Wenn sie in einem Container installiert ist, liefert sie Informationen über die Kapazität Ihrer Container in der Statusleiste.

Resource use Status bar

Wenn Sie möchten, dass diese Erweiterung immer installiert ist, fügen Sie dies zu Ihrer settings.json hinzu:

"dev.containers.defaultExtensions": [
    "mutantdino.resourcemonitor"
]

Wenn Sie feststellen, dass Sie Ihrem Container mehr Kapazität Ihres Computers zur Verfügung stellen müssen, befolgen Sie diese Schritte:

  1. Klicken Sie mit der rechten Maustaste auf das Docker-Symbol in der Taskleiste und wählen Sie Einstellungen / Voreinstellungen.
  2. Gehen Sie zu Erweitert, um CPU, Speicher oder Swap zu erhöhen.
  3. Unter macOS gehen Sie zu Datenträger, um die Menge an Datenträger zu erhöhen, die Docker auf Ihrem Computer verbrauchen darf. Unter Windows befindet sich dies unter Erweitert zusammen mit den anderen Einstellungen.

Schließlich, wenn Ihr Container festplattenintensive Vorgänge ausführt oder Sie einfach nur schnellere Reaktionszeiten wünschen, lesen Sie Container-Festplattenleistung verbessern für Tipps. Die Standardeinstellungen von VS Code sind auf Bequemlichkeit und universelle Unterstützung optimiert, können aber optimiert werden.

Nicht verwendete Container und Images aufräumen

Wenn Sie eine Fehlermeldung von Docker erhalten, dass Sie keinen Festplattenspeicher mehr haben, können Sie dies normalerweise beheben, indem Sie nicht verwendete Container und Images aufräumen. Dafür gibt es mehrere Möglichkeiten:

Option 1: Verwenden Sie den Remote Explorer

Sie können Container löschen, indem Sie den Remote Explorer auswählen, mit der rechten Maustaste auf den zu entfernenden Container klicken und Container entfernen auswählen.

Remote Explorer screenshot

Dies bereinigt jedoch keine Images, die Sie möglicherweise heruntergeladen haben und die Ihr System überladen können.

Option 2: Verwenden Sie die Container Tools-Erweiterung

  1. Öffnen Sie ein lokales Fenster in VS Code (Datei > Neues Fenster).

  2. Installieren Sie die Container Tools-Erweiterung aus der Erweiterungsansicht, falls sie noch nicht vorhanden ist.

  3. Sie können dann zum Container Explorer gehen, den Knoten Container oder Images erweitern, mit der rechten Maustaste klicken und Container / Image entfernen auswählen.

    Container Explorer screenshot

Option 3: Verwenden Sie die Docker CLI, um auszuwählende Container zu löschen

  1. Öffnen Sie ein lokales Terminal/eine Eingabeaufforderung (oder verwenden Sie ein lokales Fenster in VS Code).
  2. Geben Sie docker ps -a ein, um eine Liste aller Container anzuzeigen.
  3. Geben Sie docker rm <Container-ID> aus dieser Liste ein, um einen Container zu entfernen.
  4. Geben Sie docker image prune ein, um nicht verwendete Images zu entfernen.

Wenn docker ps nicht genügend Informationen liefert, um den zu löschenden Container zu identifizieren, listet der folgende Befehl alle von VS Code verwalteten Entwicklungcontainer und den Ordner, der zu ihrer Generierung verwendet wurde, auf.

docker ps -a --filter="label=vsch.quality" --format "table {{.ID}}\t{{.Status}}\t{{.Image}}\tvscode-{{.Label \"vsch.quality\"}}\t{{.Label \"vsch.local.folder\"}}"

Option 4: Verwenden Sie Docker Compose

  1. Öffnen Sie ein lokales Terminal/eine Eingabeaufforderung (oder verwenden Sie ein lokales Fenster in VS Code).
  2. Navigieren Sie in das Verzeichnis mit Ihrer docker-compose.yml-Datei.
  3. Geben Sie docker-compose down ein, um die Container zu stoppen und zu löschen. Wenn Sie mehr als eine Docker Compose-Datei haben, können Sie zusätzliche Docker Compose-Dateien mit dem -f-Argument angeben.

Option 4: Löschen Sie alle Container und Images, die nicht ausgeführt werden

  1. Öffnen Sie ein lokales Terminal/eine Eingabeaufforderung (oder verwenden Sie ein lokales Fenster in VS Code).
  2. Geben Sie docker system prune --all ein.

Build-Fehler von Dockerfiles für Images mit Debian 8 beheben

Beim Erstellen von Containern, die Images auf Basis von Debian 8/Jessie verwenden (z. B. ältere Versionen des node:8-Images), können Sie auf folgenden Fehler stoßen:

...
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)
E: Some index files failed to download. They have been ignored, or old ones used instead.
...

Dies ist ein bekanntes Problem, das dadurch verursacht wird, dass Debian 8 "archiviert" wurde. Neuere Versionen von Images beheben dieses Problem in der Regel, oft durch ein Upgrade auf Debian 9/Stretch.

Es gibt zwei Möglichkeiten, diesen Fehler zu beheben:

  • Option 1: Entfernen Sie alle Container, die von dem Image abhängen, entfernen Sie das Image und versuchen Sie dann erneut zu erstellen. Dadurch sollte ein aktualisiertes Image heruntergeladen werden, das nicht von dem Problem betroffen ist. Weitere Informationen finden Sie unter Nicht verwendete Container und Images aufräumen.

  • Option 2: Wenn Sie Ihre Container oder Images nicht löschen möchten, fügen Sie diese Zeile vor jedem apt- oder apt-get-Befehl in Ihre Dockerfile ein. Sie fügt die benötigten Quelllisten für Jessie hinzu:

    # Add archived sources to source list if base image uses Debian 8 / Jessie
    RUN cat /etc/*-release | grep -q jessie && printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list
    

Anmeldefehler bei Docker Hub beheben, wenn eine E-Mail-Adresse verwendet wird

Die Docker CLI unterstützt nur die Verwendung Ihrer Docker-ID. Daher kann die Verwendung Ihrer E-Mail-Adresse zur Anmeldung Probleme verursachen. Weitere Informationen finden Sie in Docker Issue #935.

Als Workaround melden Sie sich mit Ihrer Docker-ID bei Docker an, anstatt mit Ihrer E-Mail-Adresse.

Hohe CPU-Auslastung von Hyperkit unter macOS

Es gibt bekannte Probleme mit Docker für Mac, die zu hohen CPU-Spitzen führen können. Insbesondere hohe CPU-Auslastung beim Beobachten von Dateien und beim Erstellen. Wenn Sie im Aktivitätsmonitor eine hohe CPU-Auslastung für com.docker.hyperkit feststellen, während in Ihrem Dev-Container wenig geschieht, sind Sie wahrscheinlich von diesem Problem betroffen. Folgen Sie dem Docker-Issue für Updates und Korrekturen.

Verwendung eines SSH-Tunnels zur Verbindung mit einem entfernten Docker-Host

Der Artikel Entwickeln in einem Container auf einem entfernten Docker Machine oder SSH-Host behandelt die Einrichtung von VS Code bei der Arbeit mit einem entfernten Docker-Host. Dies geschieht oft so einfach wie das Festlegen der Eigenschaft containers.environment der Container Tools-Erweiterung in settings.json oder der Umgebungsvariable DOCKER_HOST auf eine ssh:// oder tcp:// URI.

In bestimmten Umgebungen funktioniert dies jedoch aufgrund komplexer SSH-Konfigurationen oder anderer Einschränkungen möglicherweise nicht. In diesem Fall kann ein SSH-Tunnel als Fallback verwendet werden.

Verwendung eines SSH-Tunnels als Fallback-Option

Sie können einen SSH-Tunnel einrichten und den Docker-Socket von Ihrem entfernten Host auf Ihren lokalen Computer weiterleiten.

Befolgen Sie diese Schritte:

  1. Installieren Sie einen OpenSSH-kompatiblen SSH-Client.

  2. Aktualisieren Sie die Eigenschaft containers.environment der Container Tools-Erweiterung in Ihrer Benutzer- oder Arbeitsbereichs-settings.json wie folgt:

    "containers.environment": {
        "DOCKER_HOST": "tcp://:23750"
    }
    
  3. Führen Sie den folgenden Befehl in einem lokalen Terminal/PowerShell aus (ersetzen Sie user@hostname durch den entfernten Benutzer und Hostnamen/IP-Adresse Ihres Servers):

    ssh -NL localhost:23750:/var/run/docker.sock user@hostname
    

VS Code kann nun jeden laufenden Container auf dem entfernten Host anhängen. Sie können auch spezialisierte, lokale devcontainer.json-Dateien verwenden, um einen entfernten Dev-Container zu erstellen / sich damit zu verbinden.

Wenn Sie fertig sind, drücken Sie Strg+C im Terminal / PowerShell, um den Tunnel zu schließen.

Hinweis: Wenn der ssh-Befehl fehlschlägt, müssen Sie möglicherweise AllowStreamLocalForwarding auf Ihrem SSH-Host aktivieren.

  1. Öffnen Sie /etc/ssh/sshd_config in einem Editor (wie Vim, nano oder Pico) auf dem SSH-Host (nicht lokal).
  2. Fügen Sie die Einstellung AllowStreamLocalForwarding yes hinzu.
  3. Starten Sie den SSH-Server neu (unter Ubuntu, führen Sie sudo systemctl restart sshd aus).
  4. Versuchen Sie es erneut.

Benutzerprofil beibehalten

Sie können die Eigenschaft mounts verwenden, um das Benutzerprofil (z. B. Shell-Verlauf) in Ihrem Dev-Container über Neuerstellungen hinweg beizubehalten.

    "mounts": [
        "source=profile,target=/root,type=volume",
        "target=/root/.vscode-server,type=volume"
    ],

Der obige Code erstellt zuerst ein benanntes Volume namens profile, das nach /root gemountet wird und eine Neuerstellung übersteht. Anschließend wird ein anonymes Volume erstellt, das nach /root/.vscode-server gemountet wird und bei Neuerstellung zerstört wird, was es VS Code ermöglicht, Erweiterungen und Dotfiles neu zu installieren.

Tipps zur erweiterten Container-Konfiguration

Weitere Informationen zu den folgenden Themen finden Sie in den Artikeln zur erweiterten Container-Konfiguration:

Tipps zu Erweiterungen

Während viele Erweiterungen unverändert funktionieren, gibt es einige Probleme, die verhindern können, dass bestimmte Funktionen wie erwartet funktionieren. In einigen Fällen können Sie einen anderen Befehl verwenden, um das Problem zu umgehen, in anderen Fällen muss die Erweiterung geändert werden. Der Abschnitt Tipps für Remote-Erweiterungen bietet eine Kurzübersicht über häufige Probleme und Tipps zu deren Behebung. Sie können auch den Hauptartikel zur Erweiterung über Unterstützung von Remote-Entwicklungen für eine detaillierte Anleitung zur Änderung von Erweiterungen zur Unterstützung von Remote-Erweiterungshosts konsultieren.

Fragen und Feedback

Probleme melden

Wenn Sie auf ein Problem mit der Dev Containers-Erweiterung stoßen, ist es wichtig, die richtigen Protokolle zu sammeln, damit wir Ihnen helfen können, Ihr Problem zu diagnostizieren. Sie können die Protokolle der Dev Containers-Erweiterung mit Dev Containers: Container-Protokoll anzeigen abrufen.

Wenn Sie Probleme mit der Verwendung anderer Erweiterungen im Remote-Betrieb haben (z. B. andere Erweiterungen werden im Remote-Kontext nicht richtig geladen oder installiert), ist es hilfreich, die Protokolle aus dem Ausgabefenster des Remote Extension Host abzurufen (Ausgabe: Ausgabeansicht fokussieren) und Protokoll (Remote Extension Host) aus der Dropdown-Liste auszuwählen.

Hinweis: Wenn nur Protokoll (Extension Host) angezeigt wird, handelt es sich um den lokalen Extension Host, und der Remote Extension Host wurde nicht gestartet. Dies liegt daran, dass der Protokollkanal erst erstellt wird, nachdem die Protokolldatei erstellt wurde. Wenn der Remote Extension Host nicht gestartet wird, wurde die Protokolldatei des Remote Extension Hosts nicht erstellt und wird nicht in der Ausgabeansicht angezeigt. Dies sind dennoch hilfreiche Informationen, die Sie in Ihre Anfrage aufnehmen sollten.

Ressourcen für Fragen und Feedback zu Remote-Umgebungen

Wir haben eine Vielzahl anderer Remote-Ressourcen:

© . This site is unofficial and not affiliated with Microsoft.