私は Docker と LXD を使ってサーバーをセットアップしています。私は、Docker と LXD の間で共有できるブリッジを作成したい複数の VLAN を持つ実際のネットワークを持っています。これは LXD では比較的簡単でしたが、Docker はすべてを制御しようとするうっとうしいガールフレンドのようなもので、うまく動作させるのに苦労しています。
ネットプランの構成は次のとおりです。
network:
version: 2
ethernets:
enp5s0:
match:
macaddress: 84:a9:3e:86:7b:d4
set-name: enp5s0
enx0s0:
match:
macaddress: 00:e0:4c:02:61:57
set-name: enx0s0
bridges:
vlan69: # Untagged
interfaces:
- enp5s0
parameters:
stp: true
forward-delay: 4
dhcp4: yes
dhcp6: no
vlan36:
interfaces:
- enx0s0.36
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlan32:
interfaces:
- enp5s0.32
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlan1:
interfaces:
- enp5s0.1
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlans:
enx0s0.36:
accept-ra: no
id: 36
link: enx0s0
enp5s0.32:
accept-ra: no
id: 32
link: enp5s0
enp5s0.1:
accept-ra: no
id: 1
link: enp5s0
LXD を使用すると、VLAN の 1 つに NIC を追加するだけで簡単に実行できます。
devices:
enp1s0:
nictype: bridged
parent: vlan36
type: nic
しかし、どうやら Docker の扱いはそれほど簡単ではないようです。Docker ネットワークのソースを何時間も検索した結果、これにたどり着きました。
root@host:~# docker network create vlan32 \
-o com.docker.network.bridge.inhibit_ipv4=true \
-o com.docker.network.bridge.name=vlan32 \
--subnet=192.168.32.0/24 \
--gateway=192.168.32.254
これはうまく機能しているように見えました。コンテナーの接続は問題なく機能し、コンテナーはネットワークにアクセスでき、ルーターはコンテナーが接続されていることを確認でき、ネットワーク上の他のデバイスへの ping も機能していましたが、コンテナーへの着信接続を確立することはできません。コンテナーに ping すると、到達不能なネットワークが表示されます。これは Docker だけでなく LXD にも影響します。つまり、Docker は単にブリッジを採用しているように見えますが、何らかの影響を与えます。Docker サービスを無効にして再起動すると、LXD コンテナーの問題は修正されます。
答え1
この解決策は正しいようには思えませんが、機能し、希望どおりに動作するようです。問題は、ドライバーが をbridge
サポートしていないことだと思います-o parent
。代わりに、独自のデバイスを作成します。
ネットプラン
network:
version: 2
ethernets:
<NIC>:
dhcp4: yes
bridges:
vlan<VLAN>:
interfaces:
- <NIC>.<VLAN>
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
vlans:
<NIC>.<VLAN>:
accept-ra: no
id: <VLAN>
link: <NIC>
翻訳
devices:
enp1s0:
nictype: bridged
parent: vlan<VLAN>
ドッカー
root@host:~# docker network create <NETWORK_NAME> \
--subnet 192.168.x.x/24 \
--gateway 192.168.x.254 \
--driver macvlan \
-o parent=vlan<VLAN>