Les téléchargements du terminal fonctionnent, mais les extensions VS Code échouent sur le VPN
curl fonctionne dans le conteneur et l'extension ne s'installe toujours pas. Comparez l'éditeur local et l'environnement distant avant de copier les paramètres du proxy.
Les téléchargements qui réussissent dans le terminal du conteneur sont une preuve réelle de l'environnement de ce terminal. Ils ne disent rien du processus de l'éditeur, de l'installateur d'extensions ni du binaire qu'une extension récupère ensuite. Copier les variables de proxy entre ces trois transforme une requête échouée en tout un après-midi de modifications sans rapport.
Deux environnements diffèrent généralement sur exactement un point. Trouver ce point est plus rapide que lire deux fois la documentation du proxy.
Quel processus a fait la requête échouée
Trois requêtes peuvent échouer pendant une seule installation, et chacune a sa propre identité réseau. L'éditeur demande au Marketplace les métadonnées et une URL de paquet, puis télécharge le paquet. C'est seulement ensuite que l'hôte d'extensions exécute du code qui peut récupérer un serveur de langage ou son propre binaire. L'étape qui a cassé décide quel processus a besoin d'un proxy, et la surface d'erreur nomme rarement cette étape.
Un terminal qui fonctionne prouve que le conteneur peut atteindre Internet, pas que l'éditeur le peut. Lisez le journal de l'extension pour connaître la dernière URL qu'elle a tentée. L'hôte qui y est nommé identifie le processus et la règle qui s'y applique.
L'éditeur local et le conteneur distant sont deux environnements
Dans un espace de travail distant, une extension s'exécute du côté que déclare son type. Les extensions d'interface restent avec l'éditeur local, et les extensions d'espace de travail s'exécutent dans le conteneur. Un proxy défini dans l'un est invisible pour l'autre, et une reconstruction recrée l'environnement du conteneur à partir de son fichier de configuration plutôt que de ce que vous avez exporté dans un shell. Cette séparation explique pourquoi la même extension s'installe sur un ordinateur portable et échoue dans le même projet via SSH.
Lisez l'emplacement d'installation avant de modifier quoi que ce soit. Quand le journal signale une installation distante, c'est l'environnement du conteneur qui compte.
Placez le proxy là où commence la requête
Pour un Dev Container qui a réellement besoin d'un proxy HTTP, la variable appartient à la configuration du conteneur afin qu'une reconstruction la reproduise. L'extrait ci-dessous la définit pour cet environnement. L'adresse de substitution représente votre propre passerelle, et les exclusions ne sont pas un remplissage facultatif.
"containerEnv": {
"HTTP_PROXY": "http://proxy.corp.example:8080",
"HTTPS_PROXY": "http://proxy.corp.example:8080",
"NO_PROXY": "localhost,127.0.0.1,.internal.example"
}
Le nom de la variable décrit le protocole de destination, donc une valeur HTTPS_PROXY peut légitimement commencer par http. Appliquez la modification par le chemin de reconstruction pris en charge et conservez les exclusions, car un proxy qui intercepte des hôtes internes casse des services dont le conteneur a besoin.
Séparez les échecs de confiance de l'accessibilité
Un proxy qui se connecte puis renvoie une erreur de vérification de certificat a atteint une étape plus tardive qu'un proxy qui refuse la connexion. Le premier échec veut le matériel de confiance approuvé par l'organisation, installé dans l'environnement qui effectue la requête. Le second veut une adresse et un port joignables. Les traiter comme un seul problème produit un correctif qui ne fonctionne pour aucun des deux.
Désactiver la vérification, ou exécuter l'éditeur avec des droits élevés, n'est pas une réparation pour un proxy manquant ou une chaîne de confiance absente. Les deux échangent une erreur visible contre une erreur silencieuse. Réessayez ensuite la même extension et notez la prochaine URL qui échoue.
env | grep -iE '^(http|https|no)_proxy='
code --install-extension ms-python.python --force
Notez quel côté de l'espace de travail a produit cette URL. Une courte note nommant l'étape, l'hôte et le côté vaut plus qu'une liste de réglages que quelqu'un a modifiés, car c'est cette note que la personne suivante pourra reproduire.