web-dev-qa-db-ja.com

Ubuntu Virtualbox内のDockerコンテナをmacvlan経由で物理ネットワークに接続することは可能ですか?

この質問はSOでトピック外としてマークされているため、ここでクロスポストします。

macvlan を使用してDockerコンテナーを物理ネットワークに接続することについていくつかの質問を見てきましたが、現在のシナリオに対する答えはまだ見つかりません。

私が達成しようとしていること:

  • Ubuntuを実行しているVirtualBox VM)内でDockerコンテナを実行します。
  • Macvlanを使用して、コンテナーを同じDockerネットワークに接続し、物理ネットワークのサブネット内の各IPアドレスを割り当てます。
  • ホストまたはネットワークに接続されている他のデバイスから、この割り当てられたIPアドレスを介して各コンテナにアクセスします。

これまでのところ、私は次のことを行いました。

  • Vagrantを使用して私のVM)を作成しました。
  • Wi-FiインターフェイスをブリッジアダプターとしてVMに追加しました。
  • VMの説明に従って ここ )に関連付けられたデフォルトゲートウェイをルーターのIP(192.168.1.1)に設定します。
  • 次のコマンドを使用して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)によってドロップされていると推測していますが、それを修正するために何を変更すればよいかわかりません。 。

3
atomborn

他の誰かがこの問題に遭遇している場合は、Dockerネットワークが接続されているインターフェイスでプロミスキャスモードが有効になっているかどうかに関係しているようです。

VirtualBoxの設定からアダプターをプロミスキャスモードに設定するだけで十分だと思いましたが、そうではないようです(これがなぜであるかについての私の最良の仮説は、Vagrantを使用しているということです)。

VirtualBoxからプロミスキャスモードを設定した後([設定]-> [ネットワーク]-> [ブリッジアダプター]-> [詳細設定]-> [プロミスキャスモード]-> [すべて許可])、VM内でもオンにする必要がありました。

Sudo ip link set eth1 promisc on

これで、ホストマシンからIPでVMのコンテナにpingを実行できます。 iptablesをいじることなく、Ubuntu14.04と16.04の両方でこれを正常にテストできました。

繰り返しになりますが、前述のように、はVM)内からコンテナにpingを実行できません。 macvlanの性質。

3
atomborn

コンテナがVMにpingを実行できるようにする方法を見つけました。コンテナ内のルーティングルールを削除するだけです。

私の場合、 route del -net 192.168.1.0/24は非常にうまく機能しました。

0
user1052411