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