Docker 컨테이너에서 "다른 컨테이너 이름"을 가져오려고 하면 컬은 먼저 이름을 IPv6으로 확인하려고 시도합니다. ipv6을 통해 웹 서버에 접근할 수 없기 때문에 몇 초의 지연이 발생할 수 있습니다.
컨테이너 인터페이스에서 링크 로컬 주소를 제거하고 컨테이너의 lo 및 eth0 인터페이스에서 ipv6을 비활성화했습니다. 컬은 여전히 이름을 IPv6으로 먼저 확인하려고 시도합니다(curl -4를 통해 강제로 실행하지 않는 한).
이것은 잘못된 것 같습니다. ipv6이 비활성화되었음에도 불구하고 컬이 이름을 ipv6으로 확인하려고 시도하는 이유는 무엇입니까?
답변1
나는IPv6을 전역적으로 비활성화하면 작동하지 않습니다.
여전히 5초의 "초기화" 지연이 발생합니다. 인수
만 -4
유효합니다. (명령과 동일 wget
)
또한 iptables가 IPV6 트래픽을 거부하도록 강제해 보았습니다.
↪ 아무것도 변하지 않았습니다
도메인 명 시스템
테스트 결과 이러한 지연의 원인은 이름 확인이었습니다.
IP 기반 URL을 컬링하면 즉시 수행됩니다.
이상하게도 이름 확인 자체는 nslookup
즉각적입니다(IPV6 응답은 포함되지 않음).
답변2
/etc/gai.conf
편집하고 주석 처리를 제거하여 이 동작을 변경할 수 있습니다 precedence ::ffff:0:0/96 100
.
그러나 이는 단지 curl
.