내 Docker 컨테이너는 포트 8500에서 HTTP 포트를 노출하며 호스트 포트 8500에 매핑됩니다 . IPv6을 사용할 수 없습니다 . 이것은 여전히 localhost : 8500에서 액세스 할 수 있어야한다는 의미입니다. IPv6이 선호되므로 [:: 1] : 8500에 대한 요청으로 끝납니다. 이것은 갇히고 결코 돌아 오지 않습니다.
curl로 이것을 재현하면이 명령이 중단됩니다.
curl -g -6 "http://[::1]:8500"
curl의 –verbose 옵션은 –ascii-trace도 표시하지 않습니다. 동시에 IPv4의 로컬 호스트에 대한 요청이 성공합니다.
curl http://127.0.0.1:8500
예상 HTML을 제공합니다. 루프백에서 IPv4 HTTP 서버를 실행하는 경우
python -m SimpleHTTPServer 4001
그런 다음 IPv4의 로컬 호스트에 대한 많은 HTML을 얻습니다.
curl http://127.1:4001
IPv6에 대한 올바른 연결 실패 :
curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused
참고 사항 : Docker 1.7.1. IPv6은되어 있지 따라서 더 IPv6를 먼저, iptable 규칙이없는, 컨테이너를 사용할. (ip6tables -v -L은 아무것도 제공하지 않습니다)
내 질문은 : 왜 요청이 멈추고 무엇을합니까?
답변
ipv6 및 ebable 전달을 활성화하십시오.
# cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0