syslogに次のメッセージが表示されます。moby#36954にありますipv6。daemon.jsonで-flagを設定することに加えて、IPv6サブネットをで定義する必要がありますfixed-cidr-v6。構成されたサブネットfixed-cidr-v6は、Dockerのデフォルトの「ブリッジ」ネットワークに接続されているコンテナーにIPv6アドレスを割り当てるために使用されます。17.09のドキュメントで説明されているように、プレフィックスの長さは最大80(つまり、サイズは少なくとも80)である必要があります。Dockerコンテナーのサブネットのサイズは少なくとも。ある必要があります/80。これにより、IPv6アドレスがコンテナーのMACアドレスで終了し、DockerレイヤーでのNDP近隣キャッシュの無効化の問題を防ぐことができます。このプレフィックス長の要件は、MACアドレスベースのIPアドレス生成によって引き起こされるデフォルトの「ブリッジ」ネットワークに固有であることに注意してください。次に、で指定するサブネットについての質問が発生しますfixed-cidr-v6。これは、パブリックにルーティング可能なアドレスのサブネット、またはプライベートアドレススペースを定義するサブネットのいずれかです。パブリックにルーティング可能なアドレスを使用すると、コンテナーでIPv6インターネット接続を有効にするためにホストでさらに構成を行う必要がないという利点があります。これには大きな欠点があります。Dockerで公開されている(または公開されていない)コンテナポートに関係なく、すべてのコンテナがインターネットから完全にアクセスできる可能性があります。80のパブリックサブネットが使用可能である必要があります。このため、私の推奨事項は、常にfixed-cidr-v6プライベートサブネットに設定することfd00::/80です。Dockerの構成DockerでIPv6を有効にするには、最初に次の内容でファイル/etc/docker/daemon.jsonを作成します(または、すでに存在する場合は値を追加します)。次に、Dockerを再起動します。dockerコンテナーからのIPv6インターネットアクセスを有効にするには、ホスト上のプライベートDockerサブネットに対してNATを有効にします。MASQUERADEコンテナでのIPv6接続のテストIPv6インターネット接続が正しく機能しているかどうかをテストするには、今度はコンテナーからpingコマンドを再度実行します。msDockerでIPv6が有効になると、そのデフォルトの動作は、IPv4とIPv6の両方を介してホスト上の公開されたコンテナポートを公開することです。UbuntuのようなLinuxホストでは、2つのプロトコルバージョンに異なる手法を使用します。userland-proxy)を使用します。これを確認するには、最小限のWebサーバーを起動します。-v'次に、netstatを使用してホストでTCP接続を現在リッスンしているプロセスを一覧表示します。-plntuserland-proxyには大きな欠点があります。それは、実際のリモートアドレスをコンテナから隠すことです。したがって、IPv6リクエストの場合、コンテナはプロキシのアドレスのみを認識します。これは、webtestコンテナのログでも確認できます。自分で試してみたい場合は、サービスを提供しているWebサイトに移動します。最初にDockerホストのIPv4アドレスを使用します。次に、DockerホストのIPv6アドレスを使用します。次に、コンテナからhttpdのログ出力を取得します。response:404ユースケースによっては、どのリモートアドレスコンテナが表示されるかは問題にならない場合があります。moby#14856を参照)。ip6tablesを使用したポートの公開userland-proxyに依存する代わりに、ip6tablesルールを使用してコンテナポートを公開できます。残念ながら、Dockerはip6tablesの管理をネイティブにサポートしていません。ip6tablesの手動構成は、面倒でエラーが発生しやすい場合があります。これは、docker-ipv6natがステップインする場所です。このプロジェクトは、DockerがIPv4に対してNATを実行する方法を模倣し、それをIPv6に適用します。プロジェクトのドキュメントを参照することをお勧めします。本質は次のとおりです。次のコマンドを実行すると、すべて設定されます。response:404コンテナをパブリックIPv6アクセスに公開するIPv6により、限られた数のパブリックIPv4アドレスによって課せられる制約が排除されるため、個別のパブリック(IPv6)アドレスを使用してコンテナー化されたマイクロサービスを公開することがより実現可能になります。Dockerのデフォルトの「ブリッジ」ネットワークでは、IPv6アドレスはコンテナーのMACアドレスに基づいて割り当てられます。これは、コンテナーの開始順序によって異なります。これにより、このネットワーク内のコンテナに固定IPv6アドレスを割り当てることが困難または不可能になります。追加のIPv6対応ブリッジネットワークでは、アドレスが順番に割り当てられ、コンテナは事前定義されたアドレスを使用してこれらのネットワークに参加できます。16サイズのIPv4サブネットを使用し、65534個の異なるIPv4アドレスを提供します。112サブネットです。64)を使用できるとすると、「公開されたホスト」用に追加のDockerブリッジネットワークを作成できます。[containername]DockerのIPv6機能を有効にすることで、IPv6パケットの転送がホストのカーネルで自動的に有効になります。コンテナにはインターネットから直接アクセスすることはできません。その理由は、ネットワークルーターがIPv6パケットをDockerコンテナーに転送する方法を見つけることができないためです。これを変更するには、NDP(近隣探索プロトコル)メッセージをコンテナーにプロキシするようにホストを構成する必要があります。net.ipv6.conf.ens3.proxy_ndp=1(ens3をホストのデフォルトのイーサネットインターフェイスの名前に置き換えます)。これについての詳細は、Docker17.09のドキュメントに記載されています。この方法で完全なサブネットを追加することはできません。NDPプロキシデーモンの設定ホストにNDPプロキシを手動で設定する代わりに、NDPプロキシデーモン(ndppd)をインストールすることもできます。NDPメッセージをサブネットにプロキシするように構成でき、システムのIPv6ルーティングテーブルからプロキシターゲットインターフェイスを自動的に解決できます。ndppdをインストールするには、次のコマンドを実行します。