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 때문이며 내 애플리케이션은 다음에 바인딩되어 있습니다.

우분투 상자에서 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.[::]:80http://127.0.0.1


요약하자면, 호출할 때 응답을 받기 때문에 http://127.0.0.1(404이지만 여전히 응답임) IPv4의 포트 80에서 수신 대기하는 다른 서비스가 있을 수 있음을 의미합니다. 따라서 에서 [::]:80로 전환하면 0.0.0.0:80다른 포트가 해당 포트를 사용하고 있음을 나타내는 오류가 발생할 수 있습니다.

관련 정보