Centos

Docker 容器無法拉取 github repo,名稱解析失敗

  • November 3, 2016

我正在使用 docker 1.7 版centos-6

docker --version
Docker version 1.7.1, build 786b29d/1.7.1

問題是:當/etc/resolv.conf文件以某種方式包含具有 ipv6 地址的名稱伺服器時,它無法解析或從 github 提取一些 repos。

當我將名稱伺服器更改為僅 IPv4 地址時,它再次起作用。

這個問題有什麼永久的解決辦法嗎?升級docker版本會修復它嗎?

或者這個問題還有其他根本原因嗎?

docker inspect 命令的網路設置:

"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

您沒有在容器內獲得任何 IPv6 路由/工作,因為正如我們所見,它們內部沒有 IPv6 定址工作,而僅在主機級別工作。

根據IPv6 使用者指南 - 網路 - IPv6 with 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 路由

引用自:https://unix.stackexchange.com/questions/320789