Eu tenho o Ubuntu no WSL 2 rodando no sistema operacional Windows 10 (versão 10.0.19044 Build 19044).
O Firewall do Windows Defender está totalmente desabilitado .
O que funciona
Um aplicativo Express muito básico
index.js
:const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening on port ${port}`) })
Dentro da WSL, eu corro
npm init
,npm i express
e finalmentenode index.js
.Em seguida, em um navegador no sistema operacional host, visito http://localhost:3000 e vejo "Hello World!".
Outros aplicativos Node, como EmberJS:
npx ember-cli -- new foo cd foo/ npm start
Isso inicia um servidor dev na porta 4200 dentro do WSL.
Em seguida, em um navegador no sistema operacional host, visito http://localhost:4200 e vejo um aplicativo clichê.
O que não funciona
(claro, eu me certifico primeiro de que as portas estão disponíveis)
Executando um nó
http-server
:Eu começo
npx http-server -p 3000
dentro da WSL.Eu acesso http://localhost:3000 no sistema operacional host. Apesar de usar a mesma porta e host de antes, vejo "Conexão recusada".
De dentro do WSL, a página é aberta (por exemplo, com
links http://localhost:3000
).Executando um servidor HTTP Python:
Eu começo
python3 -m http.server 4200
dentro da WSL.Eu acesso http://localhost:4200 no sistema operacional host. Apesar de usar a mesma porta e host de antes, vejo "Conexão recusada".
De dentro do WSL, a página é aberta (por exemplo, com
links http://localhost:4200
).Executando o Chrome sem cabeça com
--remote-debugging-port
.O Chrome no sistema operacional host não consegue se conectar ao Chrome sem periféricos no WSL.
O que eu tentei
Nenhum destes ajuda:
- Reinicializando.
wsl --shutdown
.- Pesquisando no Google. Muito.
Notas
Quando eu inicio, por exemplo npx http-server -p 4200
, uma entrada aparece na guia Rede do Monitor de Recursos no sistema operacional host. Ele diz porta 4200
, processo wslhost.exe
, status do firewall "Permitido, não restrito".
Ainda assim, vejo isso:
UPD 1 : Eu estive ? sobre isso por dias e vejo tentativas individuais passarem. Como uma vez que vi o Chrome Inspector se conectar ao Chrome sem cabeça no WSL, duas vezes vi http-server
servir uma página de índice. Não funcionou por dezenas de tentativas, então de repente funciona uma vez e para de funcionar novamente.
Ao mesmo tempo, node index.js
com Express e ember serve
são 100% confiáveis e estão sempre acessíveis a partir do sistema operacional host, mesmo na mesma porta.
UPD 2 : o problema não acontece com o IPv6. Adicionar -a ::
a http-server
me permite conectar de forma confiável por IPv6. Então, por que o IPv4 está falhando?!
Por favor ajude.