Container-Tools Tipps und Tricks
Dieser Artikel behandelt Problembehandlungstipps und Tricks für die Visual Studio Code Container-Tools-Erweiterung. Informationen zur Einrichtung und Arbeit mit Containern finden Sie in den Übersichts- und Schnellstartartikeln für Node.js, Python oder ASP.NET.
Ausführung als Nicht-Root-Benutzer
Aus Sicherheitsgründen empfehlen wir, beim Ausführen des Befehls Container: Docker-Dateien zum Arbeitsbereich hinzufügen... die Standardports auszuwählen oder andernfalls, wann immer möglich, einen Port größer als 1023 zu wählen. Dadurch kann VS Code die Dockerfile mit Nicht-Root-Zugriff konfigurieren und verhindern, dass ein bösartiger Benutzer Berechtigungen im Container erhöht. In einigen Fällen gibt es keine Portauswahl, daher konfiguriert die Container-Tools-Erweiterung standardmäßig den Nicht-Root-Zugriff. In allen Fällen müssen Sie sicherstellen, dass jede von Ihrer Anwendung modifizierte oder verwendete Ressource (wie Ports und Dateien) von einem Nicht-Root-Benutzer in Ihrem Container aus zugänglich ist.
Wenn Sie beim Hinzufügen von Dockerfiles zum Arbeitsbereich einen Port kleiner als 1024 auswählen, kann die Container-Tools-Erweiterung keine Dockerfile erstellen, die den Container als Nicht-Root-Benutzer ausführt. Dies liegt daran, dass Ports in diesem Bereich als wohlbekannte oder Systemports bezeichnet werden und mit Root-Privilegien ausgeführt werden müssen, um einen Netzwerk-Socket an eine IP-Adresse zu binden.
Der Befehl Container: Docker-Dateien zum Arbeitsbereich hinzufügen... richtet Nicht-Root-Berechtigungen ein, wenn Sie einen Nicht-Systemport wählen. Wenn Ihre aktuelle Dockerfile und tasks.json nicht für die Verwendung durch Nicht-Root-Benutzer eingerichtet sind, versuchen Sie, den Befehl Container: Docker-Dateien zum Arbeitsbereich hinzufügen... auszuführen und einen Port größer als 1023 zu wählen. Dieser Befehl überschreibt Ihre aktuelle Dockerfile und tasks.json. Für einige Projekttypen, wie z. B. Python: Allgemein, müssen Sie möglicherweise trotzdem Ihre Dockerfile und tasks.json ändern. Innerhalb der Dockerfile müssen Sie einen Nicht-Systemport öffnen, ein Arbeitsverzeichnis für Ihren App-Code erstellen und dann einen Nicht-Root-Benutzer mit Zugriff auf das App-Verzeichnis hinzufügen. Stellen Sie sicher, dass Ihr geöffneter Port überall dort aktualisiert wird, wo er referenziert wird. Im folgenden Beispiel musste der Gunicorn-Port aktualisiert werden, um dem geöffneten Port zu entsprechen.
# 1024 or higher
EXPOSE 1024
# ... other directives such as installing requirements.txt file
# Creates /app in container if it does not already exist
# Ports code into /app
WORKDIR /app
ADD . /app
# Creates a non-root user and adds permission to access the /app folder
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
CMD ["gunicorn", "--bind", "0.0.0.0:1024", "pythonPath.to.wsgi"]
Stellen Sie anschließend sicher, dass die docker run-Aufgabe in tasks.json ebenfalls denselben Port erwartet. Sie können normalerweise nach allen Vorkommen der alten Portnummer in tasks.json suchen und diese durch die neue Portnummer ersetzen. Das folgende Beispiel zeigt die erforderlichen Änderungen für eine Python Django-App.
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": ["docker-build"],
"python": {
"args": [
"runserver",
"0.0.0.0:1024", //<- Change the number after the colon
"--nothreading",
"--noreload"
],
"file": "manage.py"
}
}
Fehler "connect EACCES /var/run/docker.sock" unter Linux
Da VS Code als Nicht-Root-Benutzer ausgeführt wird, müssen Sie die Schritte unter "Docker als Nicht-Root-Benutzer verwalten" aus den Post-Installationsschritte für Linux befolgen, um von der Erweiterung auf Docker zugreifen zu können.
Container und Images sind im Container Explorer verschwunden
Dies wird höchstwahrscheinlich durch einen Konflikt mit einer anderen Erweiterung namens Docker Explorer (nicht von Microsoft erstellt) verursacht. Um dieses Problem zu lösen, verwenden Sie einen Workaround, der in vscode-docker Issue #1609 beschrieben wird.
Die Erweiterung findet Docker auf einer Remote-Maschine nicht
Fehlermeldung "Verbindung fehlgeschlagen. Ist Docker installiert und läuft?"
- Stellen Sie sicher, dass die Docker-Engine auf der Remote-Maschine installiert ist und dass die Docker CLI funktioniert (führen Sie
docker psim Terminal aus und stellen Sie sicher, dass keine Fehler auftreten). - Wenn Sie eine Remote-Entwicklungsumgebung verwenden (Remote-Maschine über SSH, WSL-Subsystem, GitHub Codespace), stellen Sie sicher, dass die Container-Tools-Erweiterung sowohl remote als auch lokal installiert ist.
Ungültige URL-Fehler
Wenn Sie eine Verbindung zu einem entfernten Docker-Daemon herstellen müssen, empfehlen wir die Verwendung von Docker-Kontexten anstelle eines containers.environment-Attributs in den Einstellungen. In dieser Anleitung erfahren Sie, wie Sie einen Kontext erstellen und verwenden, um mit einem entfernten Docker-Daemon zu kommunizieren.
Wenn Sie den aktuell verwendeten Docker-Kontext überschreiben müssen, stellen Sie sicher, dass Ihre DOCKER_HOST-Umgebungsvariable oder Ihr containers.environment.DOCKER_HOST-Attribut ein Protokoll in der URL enthält (z. B. ssh://meinuser@meine maschine oder tcp://1.2.3.4).
Hinweis: Beachten Sie, dass Ihr
containers.environment.DOCKER_HOST-Attribut Ihren Docker-Kontext überschreibt und dieDOCKER_HOST-Umgebungsvariable sowohl dascontainers.environment.DOCKER_HOST-Attribut als auch Ihren Docker-Kontext überschreibt.
Tipp: In Powershell können Sie Ihre Docker-Umgebungsvariable mit
$ENV:DOCKER_HOST = 'ssh://benutzername@1.2.3.4'ändern.
Fragen und Feedback
Wir freuen uns über Ihr Feedback! Wenn Sie Ideen oder Vorschläge haben, melden Sie ein Problem.