Ubuntu

為什麼我無法使用 127.0.0.1 訪問此應用程序?

  • March 14, 2022

我在 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 返回任何東西之外沒有任何效果。

誰能讓我知道我做錯了什麼?

您目前正在偵聽容器中的 IPv6 地址。

使用 時http://localhost,您的作業系統將同時嘗試 IPv4 和 IPv6。您可以在/etc/hosts文件中驗證這一點,因為 localhost 映射到 IPv4 和 IPv6127.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。因此,只需將其從 切換[::]:800.0.0.0:80可能會給您一個錯誤,即其他東西正在使用該埠。

引用自:https://unix.stackexchange.com/questions/694380