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

答え1

コンテナ内では IPv6 ルーティングや作業は行われません。これは、コンテナ内では IPv6 アドレス指定が機能しておらず、ホスト レベルでのみ機能していることがわかっているためです。

によるとIPv6 ユーザー ガイド - ネットワーキング - Docker を使用した IPv6

デフォルトでは、Docker サーバーはコンテナ ネットワークを IPv4 のみに設定します。Docker デーモンを --ipv6 フラグ付きで実行することで、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ルーティングが有効になります。

関連情報