127.0.0.1を使用してこのアプリケーションにアクセスできないのはなぜですか?

127.0.0.1を使用してこのアプリケーションにアクセスできないのはなぜですか?

Ubuntuのポート80にあるDockerコンテナに.netコアアプリケーションがあり、http://[::]:80(ipv6)?でリッスンを開始するようにバインドされているようです。

私はこれが.netに限定されているのではなく、Ubuntuボックスのネットワーク設定だと思います。

localhostでwgetを実行すると、次のような応答を受け取ります。

 wget localhost
--2022-03-14 17:47:59--  http://localhost/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.27’

ただし、アドレス127.0.0.1を使用してwgetを実行すると、404が見つかりませんでした。

wget 127.0.0.1
--2022-03-14 17:50:10--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2022-03-14 17:50:10 ERROR 404: Not Found.

私が読んだところでは、これはipv6のためであり、私のアプリケーションは次にバインドされています。

Ubuntuボックスでipv6を無効にしようとしましたが、wget localhostが何も返さないようにする以外には効果がありませんでした。

誰かが私が間違っていることを教えてもらえますか?

ベストアンサー1

現在コンテナのIPv6アドレスを受信して​​います。

を使用すると、オペレーティングシステムはhttp://localhostIPv4とIPv6を試みます。 localhostはIPv4およびIPv6にも/etc/hostsマップされているため、ファイルでそれを確認できます。127.0.0.1::1

たとえば、これは私のホストファイルの一部です。

127.0.0.1   localhost
127.0.1.1   danny

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
# [...]

IPv6でのみリッスンしながらコンテナにアクセスするには、すでに試したhttp://localhost方法を使用するか、IPv6ループバックアドレスを使用してアクセスできますhttp://[::1]。角かっこを使用すると、URLソルバーはポート区切り文字の代わりにホストのこの部分を識別できます。

たとえば、wget次のように使用できます。

wget http://[::1]

それ以外の場合は、IPv4アドレスでもリッスンする必要があります。したがって、0.0.0.0:80[::]:80http://127.0.0.1


要約すると、それは呼び出し時に応答を受け取るのでhttp://127.0.0.1(404ですがまだ応答です)、IPv4のポート80でリッスンする他のサービスがある可能性があります。したがって、[::]:80からに切り替えると、0.0.0.0:80他のポートがそのポートを使用していることを示すエラーが発生する可能性があります。

おすすめ記事