この質問はSOでトピック外としてマークされているため、ここでクロスポストします。
macvlan を使用してDockerコンテナーを物理ネットワークに接続することについていくつかの質問を見てきましたが、現在のシナリオに対する答えはまだ見つかりません。
私が達成しようとしていること:
これまでのところ、私は次のことを行いました。
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --ip-range=192.168.1.160/27 -o parent=eth1 test_net
_両方のコンテナーが稼働していて、192.168.1.160と192.168.1.161が割り当てられていることを確認できます。明らかに、macvlanの動作方法のため、これらのアドレスはVM内で到達できません。
しかし、ホストマシンからこれらのアドレスのいずれかにpingを実行しようとすると、要求がタイムアウトします。ただし、これらのアドレスにpingを実行しようとした後、ホストでarp -aを実行すると、両方のコンテナーのエントリが表示されます。
? (192.168.1.160) at 2:42:c0:a8:1:a0 on en0 ifscope [ethernet] ? (192.168.1.161) at 2:42:c0:a8:1:a1 on en0 ifscope [ethernet]
ルーターのファイアウォールが無効になっていること、上記のIPアドレスがネットワーク上の他のデバイスと競合していないこと、ホストからVM)にpingできること、デフォルトであることを確認しました。私のVMのゲートウェイはeth1インターフェースで192.168.1.1に正しく設定されています。さらに、docker networkcreateコマンドのサブネットがルーターの構成済みサブネットと一致することを確認しました。
Dockerの_-p
_フラグを利用するソリューションを見たことがありますが、IPアドレスだけで各コンテナーを参照できる必要があるため、これはオプションではありません。
私がやろうとしていることを達成することに成功した人はいますか?さらに、両方のコンテナにARPエントリがあるのにアクセスできないのはなぜですか?それを修正するにはどうすればよいですか?または、VirtualBoxがブリッジアダプターを処理する方法に関連するものはありますか?
VMでiptables
を編集してデフォルトのFORWARD
ポリシーをACCEPT
に設定する必要があると思いましたが、それも機能しませんでした。ARPが機能しているように見えるので、パケットがホストに戻る前にVM)によってドロップされていると推測していますが、それを修正するために何を変更すればよいかわかりません。 。
他の誰かがこの問題に遭遇している場合は、Dockerネットワークが接続されているインターフェイスでプロミスキャスモードが有効になっているかどうかに関係しているようです。
VirtualBoxの設定からアダプターをプロミスキャスモードに設定するだけで十分だと思いましたが、そうではないようです(これがなぜであるかについての私の最良の仮説は、Vagrantを使用しているということです)。
VirtualBoxからプロミスキャスモードを設定した後([設定]-> [ネットワーク]-> [ブリッジアダプター]-> [詳細設定]-> [プロミスキャスモード]-> [すべて許可])、VM内でもオンにする必要がありました。
Sudo ip link set eth1 promisc on
これで、ホストマシンからIPでVMのコンテナにpingを実行できます。 iptables
をいじることなく、Ubuntu14.04と16.04の両方でこれを正常にテストできました。
繰り返しになりますが、前述のように、はVM)内からコンテナにpingを実行できません。 macvlanの性質。
コンテナがVMにpingを実行できるようにする方法を見つけました。コンテナ内のルーティングルールを削除するだけです。
私の場合、 route del -net 192.168.1.0/24
は非常にうまく機能しました。