Docker 容器无法拉取 github 存储库,名称解析失败

Docker 容器无法拉取 github 存储库,名称解析失败

我正在使用 docker 版本 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 路由

相关内容