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