나는 도커 버전 1.7을 사용하고 있습니다 centos-6
.
docker --version
Docker version 1.7.1, build 786b29d/1.7.1
문제는 /etc/resolv.conf
파일에 ipv6 주소가 있는 네임서버가 포함되어 있으면 github에서 일부 저장소를 확인하거나 가져올 수 없다는 것입니다.
네임서버를 IPv4 주소로만 변경했더니 다시 작동했습니다.
이 문제에 대한 영구적인 해결책이 있습니까? Docker 버전을 업그레이드하면 이 문제를 해결할 수 있나요?
아니면 이 문제의 또 다른 근본 원인이 있습니까?
docker는 다음 명령으로 네트워크 설정을 확인합니다.
"NetworkSettings": {
"Bridge": "",
"EndpointID": "db30701ee55cf8f6b8c9fe42c820434648ed6cca5ca863c60e098f9d4ad825a3",
"Gateway": "172.17.42.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"HairpinMode": false,
"IPAddress": "172.17.0.8",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:08",
"NetworkID": "db3910e86d7f291d5586c23895a67a1140e638afcdbbf5a6b60e10c9bbb85762",
"PortMapping": null,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/4273c53a95b2",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null
},
호스트에서는 ipv6
완전히 구성되었으며 ping6 명령이 제대로 작동합니다. 하지만 컨테이너 내부에는 ipv6
필드가 비어 있는 것을 볼 수 있습니다. 컨테이너에 ipv6가 없는 이유가 있나요?
그리고:
curl -g 'http://[2400:fc00:854a:aaaa:700d:d110:e593:8d00]'
curl: (7) Failed to connect to 2400:fc00:854a:aaaa:700d:d110:e593:8d00: Network is unreachable
답변1
컨테이너 내부에서는 IPv6 주소 지정이 작동하지 않고 호스트 수준에서만 작동하기 때문에 컨테이너 내부에서는 IPv6 라우팅/작동이 불가능합니다.
~에 따르면IPv6 사용 설명서 - 네트워킹 - IPv6 및 Docker
기본적으로 Docker 서버는 컨테이너 네트워킹을 IPv4로만 구성합니다. --ipv6 플래그와 함께 Docker 데몬을 실행하여 IPv4/IPv6 듀얼 스택 지원을 활성화할 수 있습니다. Docker는 IPv6 링크 로컬 주소 fe80::1을 사용하여 브리지 docker0을 설정합니다.
기본적으로 생성된 컨테이너는 링크 로컬 IPv6 주소만 가져옵니다. 전역적으로 라우팅 가능한 IPv6 주소를 컨테이너에 할당하려면 해당 주소가 선택된 IPv6 서브넷을 지정해야 합니다. Docker 데몬을 시작할 때 --fixed-cidr-v6 매개변수를 사용하여 IPv6 서브넷을 설정합니다.
dockerd --ipv6 --fixed-cidr-v6="2001:db8:1::/64"
Docker 컨테이너의 서브넷 크기는 /80 이상이어야 합니다. 이렇게 하면 IPv6 주소가 컨테이너의 MAC 주소로 끝나고 Docker 계층에서 NDP 인접 캐시 무효화 문제를 방지할 수 있습니다.
--fixed-cidr-v6 매개변수를 설정하면 Docker는 라우팅 테이블에 새 경로를 추가합니다. 더 많은 IPv6 라우팅이 활성화됩니다.