
나는 다음에서 도커 버전 1.7을 사용하고 있습니다 centos-6
.
docker --version
Docker version 1.7.1, build 786b29d/1.7.1
문제는 /etc/resolv.conf
파일에 ipv6 주소가 있는 네임서버가 포함되어 있으면 github에서 일부 저장소를 확인하거나 가져올 수 없다는 것입니다.
이름 서버를 IPv4 주소로만 변경하면 다시 작동합니다.
이 문제에 대한 영구적인 해결책이 있습니까? Docker 버전을 업그레이드하면 문제가 해결되나요?
아니면 이 문제의 다른 근본 원인이 있습니까?
docker Inspection 명령의 네트워크 설정:
"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 사용자 가이드 - 네트워킹 - Docker를 사용한 IPv6
기본적으로 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 라우팅이 활성화됩니다.