Vieille question qui a été soulevée aujourd'hui par une autre réponse, je me permets donc d'intervenir. Cette question a été posée à l'origine pour la WSL1. Bien que la "réponse" soit la même pour le WSL2, il y a quelques légères différences qui doivent être prises en compte.
Tout d'abord, sur WSL1, comme le mentionne la réponse originale acceptée de 2016, le réseau fonctionne réellement sur l'interface hôte Windows. C'est pourquoi localhost
/ 127.0.0.1
(ou l'adresse du NIC Windows) fonctionne ici.
Le WSL2, quant à lui, fonctionne de manière virtualisée, de sorte que l'interface réseau est un vNIC doté d'un différents que celle de l'hôte Windows. Ce réseau est en fait NATé derrière l'hôte Windows. C'est également la raison pour laquelle vous pouvez accéder à une instance WSL1 en utilisant l'adresse IP de Windows à partir de otro sur le réseau, ce qui n'est pas le cas avec WSL2.
Mais le WSL2 dispose d'une fonction appelée "localhost forwarding", qui lui permet de fonctionner comme le WSL1 en ce qui concerne localhost
/ 127.0.0.1
. Cette fonction est activée par défaut, mais peut être désactivé (bien que je ne connaisse aucune raison de le faire, honnêtement).
Cette fonctionnalité vous permet d'accéder à un service (comme une application Rails, dans cette question). Si le port n'est pas utilisé sur la carte réseau Windows, le WSL2 transfère automatiquement la requête de localhost vers le même port sur la carte réseau virtuelle du WSL2.
Tout va donc bien et vous pouvez accéder aux services WSL1 et WSL2 via localhost
n'est-ce pas ?
Pas si vite, malheureusement. Parfois, comme deux autres réponses l'ont mentionné, localhostForwarding
"pauses". Nous avons identifié deux cas d'utilisation très courants (et liés) où cela se produit :
- Lorsque l'hôte Windows est en hibernation.
- Lorsque l'hôte Windows est mis sous tension à l'aide de la fonction "Démarrage rapide" de Windows, qui s'avère être activée par défaut. Cette fonction utilise une forme d'hibernation.
La solution est la suivante :
- N'hibernez pas si possible
- Désactiver le démarrage rapide. Vous le trouverez dans le Panneau de configuration. Naviguez jusqu'à Matériel et son -> Options d'alimentation -> Modifier l'action des boutons d'alimentation
- Si vous vous retrouvez dans une situation où la fonctionnalité ne fonctionne pas, comme le mentionne la réponse de @AhmetK, vous pouvez généralement récupérer la redirection de l'hôte local :
- Quitter toutes les instances WSL en cours d'exécution
- Délivrance
wsl --shutdown
(à partir de PowerShell, CMD ou même du menu Démarrer). Bien qu'un redémarrage complet de Windows ait le même effet, un redémarrage de wsl --shutdown
est beaucoup plus rapide.
- Redémarrez votre instance WSL et les services/applications en cours d'exécution.
Voir les commentaires sur cette réponse de l'OS qui ont confirmé le problème et la solution.