
私は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ルーティングが有効になります。