Ubuntu 22.04ホストでブリッジドライバを使用してDockerネットワークを作成し、ネットワーク上のコンテナを起動しました。
私のホストで実行すると、ip addr
次の2つのインターフェイスが表示されます。
5: br-fc7599764562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:d4:4f:b9:39 brd ff:ff:ff:ff:ff:ff
inet 172.21.0.1/16 brd 172.21.255.255 scope global br-fc7599764562
valid_lft forever preferred_lft forever
inet6 fe80::42:d4ff:fe4f:b939/64 scope link
valid_lftforever preferred_lft forever
6: vethe6879a0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-fc7599764562 state UP group default
link/ether e2:e8:0f:5b:37:a0 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::e0e8:fff:fe5b:37a0/64 scope link
valid_lft forever preferred_lft forever
2番目のインターフェイスは最初のインターフェイスを「デフォルト」としてリストしているので、両方のインターフェイスは間違いなく関連しています。どんな関係ですか?
この質問に関するいくつかの背景情報:実際には、各ネットワークにコンテナを持つ2つのDockerネットワークがあります。 iptablesを使ってそれらの間にNATを設定します(あるいは、少なくともそうしたと思います)あるコンテナから別のコンテナにpingを試みています。ホストで Wireshark を実行すると、ICMP パケットがブリッジ インターフェイスから到着し、 veth インターフェイス (別のブリッジではない) から送信されることがわかります。
答え1
ブリッジデバイスは仮想スイッチです。インターフェイスは、veth
コンテナを「スイッチ」に接続する仮想イーサネットケーブルです。 veth デバイスを作成すると、2 つのインターフェイスが作成されます。 Dockerは1つのインタフェースをコンテナ内に配置し(つまり、eth0
コンテナ内のインタフェースになる)、別のインタフェースを配置します。デバイスの一端をブリッジに接続します。
この記事veth デバイスに関するいくつかの追加の詳細と、さまざまなその他の仮想インターフェイスタイプの一般的な概要があります。