学習体験として、ArchLinuxワークステーションでLXCをいじっています。 ArchwikiのLXCページのガイドに従い、コンテナーの静的IPを設定しています。これは私のネットワーク構成がどのようなものかです:
/etc/netctl/lxcbridge
---------------------
Description="LXC Bridge"
Interface=br0
Connection=bridge
BindsToInterfaces=(enp1s0)
IP=static
Address=('192.168.0.20/24')
Gateway='192.168.0.1'
DNS=('192.168.0.1')
そして、コンテナ構成:
/var/lib/lxc/testcontainer/config
---------------------------------
lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 192.168.0.198/24
ただし、lxc-ls -f
によると、追加のIPアドレスが与えられます。
NAME STATE AUTOSTART GROUPS IPV4 IPV6
testcontainer RUNNING 0 - 192.168.0.198, 192.168.0.220 -
192.168.0.198
だけが欲しいです。なぜ2番目のものが割り当てられるのかわかりません。
それで、もう少し調査した後、私はこれがなぜ起こっているのかを決定しました。デフォルトのUbuntuおよびDebianテンプレートを使用してコンテナーを作成し、DHCPを使用してルーターからIPを要求するようにネットワークを設定しています。そのため、最初に静的IPはlxc.container.configを使用して設定され、コンテナーが起動すると、ルーター(または使用しているDHCPサーバー)にセカンダリIPを照会して割り当てられます。
これを停止する最も論理的な方法は、コンテナ内に静的IPを割り当てることです。したがって、Debianベースのテンプレートでは/etc/network/interfaces
を編集します。
auto etho0
iface etho0 inet static
address 192.168.0.15
netmask 255.255.255.0
gateway 192.168.0.1
次に、lxc config /var/lib/lxc/testcontainer/config
からipv4行を削除します。
lxc.network.type = veth
lxc.network.link = br0
もう1つの方法は、ipv4行を/var/lib/lxc/testcontainer/config
に保持してホストにipを設定させ、手動に設定してインターフェイスに触れないようにコンテナーに明示的に指示することです。
auto eth0
iface eth0 inet manual
ホストが一時停止されてから再開された場合、この2番目の方法には明らかにいくつかの問題があります。おそらく最初の方法を使用するのが最善です。