「車輪の再実装」って言葉が好き(実践はできてない)

vagrant-libvirtで作ったVMを、dockerのネットワークにつなげる。

...というタイトルのものの、実際は既存のlinuxブリッジにlibvirt仮想マシンをつなげる方法です。

1. つなげたいdockerネットワークのブリッジ名を調べる.

特に設定をしていなければdocker0のはずですが、
以下の様にして調べても大丈夫だと思います。

docker network inspect <ネットワーク名>

2. libvirtにおける仮想マシンの名前を取得する

以下の様にすれば取得できます. ただし、defaultの部分はVagrantfileで定義(していれば)した名前になるはず。

 virsh domname $(cat .vagrant/machines/default/libvirt/id)

3. virshで仮想マシンXMLを編集する

virsh edit 取得した名前

で、仮想マシンの定義ファイルを開き

<interface type='bridge'>
<source bridge='dockeのブリッジ名'/>
...
</interface>

とすると、仮想マシンに新たなインターフェースが追加されます。 (もしかすると、VMの再起動が必要かも?)

4. 仮想マシン内部でアドレスやルーティングを追加する。

前の手順でつないだインターフェースにはアドレスが割り振られ無いので、 仮想マシン内部で自分でIPアドレスを設定します。(172.17.0.100等)

デフォルトルートもコンテナのネットワークと同じ様にすればいい感じで使えそう。

こうすれば仮想マシン内部からpingがコンテナに届きます。