私のWSLの問題は、次のとおりです。私のWSLは、localhostの下のどこでもcURL要求を行うことができません。この例では、hello worldを返すページを作成しました。私のcURLは次のようになります(応答はhttp://でも同じであることに注意してください)
_curl -vvv localhost:80/hello_world.html
_
と応答は次のとおりです
_* Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 80 failed: Connection refused
* Failed to connect to localhost port 80: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 80: Connection refused
_
今私がPowershell _curl http://localhost:80/hello_world.html
_で次のcURLを実行すると
私が得る応答は
_StatusCode : 200
StatusDescription : OK
Content : <h1> Hello World </h1>
RawContent : HTTP/1.1 200 OK
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Accept-Ranges: bytes
Content-Length: 22
Content-Type: text/html
Date: Mon, 24 Feb 2020 09:52:20 GMT
ETag: "16-59f4f46118cab...
Forms : {}
Headers : {[Keep-Alive, timeout=5, max=100], [Connection, Keep-Alive], [Accept-Ranges, bytes], [Content-Length, 22]...} Images : {}
InputFields : {}
Links : {}
ParsedHtml : System.__ComObject
RawContentLength : 22
_
実際のHello Worldを返し、WSLで表示されるエラーメッセージは返しません
例curl: (7) Failed to connect to localhost port 80: Connection refused
編集:
サーバーはWindows 10マシンで実行され、curlも同じWindows 10マシンで実行されます。また、ウィンドウはInsiderバージョン19569.100にあります。
更新:私はチェックアウトしました このMicrosoftの記事 @Anaksunamanがコメントで共有し、_cat /etc/resolv.conf
_と言うステップを実行した後、そこからIPを取得し、解決からIPでカールを試しました.confとそれは機能しましたが、それでもlocalhostはそれが言う記事でも機能しないようです
_Depending on which version of Windows you're using, you might need to retrieve the IP address of the virtual machine. If your build is 18945 or higher, you can use localhost just like normal.
_
私はWindows Insiderユーザーなので、私のビルドは18945より高くなっています。 IP(EG 111.222.333.444)をlocalhostにマップする方法はありますか?ローカルホストにCURLを実行すると、curlは実際にIP 111.222.333.444を使用しますか?
あなたは実際にWSL2を実行しているのではないかと思います。WSL2は、WSLとはまったく異なる方法でネットワークを処理しています。何が起こっているのか、そしてその理由の非常に長い内訳については gitのこの問題 を参照してください。
短い答え:WSL2でlocalhost
を希望どおりに実行するのは簡単ではありません。個人的にWSL(最初のバージョン)にダウングレードし、最終的にすべてのリクエストを任意の起動時に割り当てられたIPにマップする必要がなく、Windowsファイアウォールルールを開いてパブリックインバウンドを許可することなく、その方法を提供しますサービスポートの接続。
ダウングレードしてlocalhost
インタラクションを魔法のように戻したい場合は、管理者としてPowershellコンソールを開き、次のように入力します(Ubuntuリリースを実行している場合)。
wsl --set-version Ubuntu 1
WSL2の機能は失われますが、正常性は回復します。 Ubuntuインスタンス自体で実行する移行タスクが1つまたは2つある場合があることに注意してください。