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 路由

相關內容