web-dev-qa-db-ja.com

Windows 10 WSL cURLがエラーでローカルホストにアクセスできません(ローカルホストポート80に接続できませんでした:接続が拒否されました)

私の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を使用しますか?

2
Theodosis

あなたは実際にWSL2を実行しているのではないかと思います。WSL2は、WSLとはまったく異なる方法でネットワークを処理しています。何が起こっているのか、そしてその理由の非常に長い内訳については gitのこの問題 を参照してください。

短い答え:WSL2でlocalhostを希望どおりに実行するのは簡単ではありません。個人的にWSL(最初のバージョン)にダウングレードし、最終的にすべてのリクエストを任意の起動時に割り当てられたIPにマップする必要がなく、Windowsファイアウォールルールを開いてパブリックインバウンドを許可することなく、その方法を提供しますサービスポートの接続。

ダウングレードしてlocalhostインタラクションを魔法のように戻したい場合は、管理者としてPowershellコンソールを開き、次のように入力します(Ubuntuリリースを実行している場合)。

wsl --set-version Ubuntu 1

WSL2の機能は失われますが、正常性は回復します。 Ubuntuインスタンス自体で実行する移行タスクが1つまたは2つある場合があることに注意してください。

3
bsplosion