私は長年にわたっていくつかのDockerテストを行ってきましたが、特定の種類のテストでは、アプリケーションコンテナーだけではなくもう少し必要です。それで私はLXC/LXDコンテナーに目を向けました、それは素晴らしいです。 LXDをインストールした後、私は自分のコンテナを作成しました:
>> willem@ubuntu:/$ lxc launch images:centos/7/AMD64 thing Creating thing
Starting thing
>> willem@ubuntu:/$ lxc list
+-------+---------+------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------+---------+------------------+------+------------+-----------+
| thing | RUNNING | 10.0.3.30 (eth0) | | PERSISTENT | 0 |
+-------+---------+------------------+------+------------+-----------+
すごい。ここではIPアドレスを制御できないようです。私は(Googleの助けを借りて見つけて)制御ファイルを見つけました:
>> root@ubuntu:/# locate lxc.conf
/etc/init/lxc.conf
..
/var/log/lxd/thing/lxc.conf
静的IP4アドレス(のように見える)を置くことができます。コンテナーを再起動したときにのみ、ホストは静的IPを忘れてしまったようで、DHCPから取得します。質問:
--ip
スイッチインdocker run
はIPアドレスを設定します)?これらの構成は、/var/lib/lxc/ContainerName/config
ファイルに配置されます。パラメータの可能な値は指定されています マニュアル内 。それらは、さまざまな領域、ホスト名、ネットワーク、コンソール、tty、マウントポイント、cgroup、機能などに関係します...
ネットワークの下で、必要なものがすべて見つかります。指定されていない変数に対して、適切な値が自動的に生成されます。あなたの質問に最も関連する部分は次のとおりです:
lxc.network.name
インターフェース名は動的に割り当てられますが、コンテナによって使用されている構成ファイルが総称名を使用するために別の名前が必要な場合は、たとえば、 eth0、このオプションはコンテナ内のインターフェースの名前を変更します。
lxc.network.hwaddr
インターフェイスのMACアドレスは、デフォルトで仮想インターフェイスに動的に割り当てられますが、場合によっては、MACアドレスの競合を解決するため、または常に同じリンクローカルipv6アドレスを持つために必要です。
lxc.network.ipv4
仮想化インターフェースに割り当てるipv4アドレスを指定します。複数の行で複数のipv4アドレスを指定しています。アドレスの形式はx.y.z.t/mです。たとえば、 192.168.1.123/24。ブロードキャストアドレスは、ipv4アドレスの直後の同じ行に指定する必要があります。
lxc.network.ipv4.gateway
コンテナー内のゲートウェイとして使用するipv4アドレスを指定します。アドレスの形式はx.y.z.tです。たとえば、 192.168.1.123。特別な値autoを持つこともできます。これは、(lxc.network.linkオプションで指定された)ブリッジインターフェイスからプライマリアドレスを取得し、それをゲートウェイとして使用することを意味します。 autoは、vethおよびmacvlanネットワークタイプを使用している場合にのみ使用できます。
LXDでコンテナーのIPアドレスを指定する場合は、/etc/default/lxd-bridge
ファイル。そこでは、外部のdnsmasq構成ファイルを含める場所があります。
あなたがUbuntu 16.04を使っていると仮定すると、
開く/etc/default/lxd-bridge
お好みのエディタで。 Sudo
を使用する必要があります。
16行目あたりで
LXD_CONFILE=""
Dnsmasq構成ファイルを指すエントリを追加します。このファイルを作成する必要があります。だから、好きな名前を付けてください。何かのようなもの lxd_bridge.conf
。
次に、上記で名前を付けたファイルを作成して編集します。
特定のIPアドレスを割り当てるコンテナごとに行を追加します。
このような:
dhcp-Host=containername,ipaddress
次に、lxd-bridgeを再起動してからコンテナーを再起動する必要があります。
これに関する詳細な記事は次のとおりです。
コンテナでAlpine Linuxを実行している場合は、これを機能させるために追加の手順を実行する必要があることに注意してください。 アルパイン
システム情報:lxc-3.0.1
のUbuntu Server 18.04.1
。
多くの検索の結果、静的IPをコンテナに割り当てる次の簡単なコマンドが見つかりました。
lxc config set [container] raw.lxc 'lxc.net.[i].ipv4.address = [ip]/[subnet-mask]'
ここで、[container]
、[i]
、[ip]
および[subnet-mask]
は、それぞれコンテナー名、ネットワークインターフェイス番号、目的の静的IPアドレス、および目的のサブネットマスクのCIDRです。
たとえば、hello
という名前のコンテナの0番目のネットワークインターフェースに、サブネットマスク240.10.0.20
を使用して255.255.255.0
を割り当てる場合は、次のように使用できます。
lxc config set hello raw.lxc 'lxc.net.0.ipv4.address = 240.10.0.20/24'
コマンドを実行した後、おそらくコンテナを再起動する必要があります。
これはおそらくコンテナの現在のIPアドレスを変更しないことに注意してください(とにかく私のセットアップでは)。コンテナは、元のIPと新しく割り当てられたIPの両方で到達可能である必要があります。その結果、lxc list
のコンテナエントリには複数のIPアドレスが含まれる可能性があります。
lxc.net.[i]
に追加できる受け入れ可能な構成キーについては、 ここ を参照してください。この webpage には、CIDR表記に関する情報が含まれています。
残念ながら、このソリューションを最初に見つけた場所を思い出せません。これが関連する GitHubの問題 であり、有用な情報が含まれている可能性があります。
私は解決策を見つけました ここ
StéphaneGraberに感謝します。
見積もり:
「LXDマネージドブリッジで最新のLXDを実行している場合は、コンテナーのネットワークインターフェースでipv4.addressプロパティを設定するだけです。
」
静的IPアドレスをlxdコンテナーに割り当てる方法にまだ苦労している人のために。
私の最初の試みはdnsmasqを介してそれを行うことだったので、/var/lib/lxd/networks/lxdbr0/dnsmasq.hosts/<container>
にコンテナーのIPアドレスを追加し、dnsmasqサービスを再ロードしました。それは実際には機能しましたが、ホストを再起動した後も持続しませんでした。
Lxdツールでそれを実現することは可能だと思いました。実際、それは lcd-doc で言及されました。コマンドlxc config set <container> user.network-config <value>
を使用してキーuser.network-configを構成する方法を本当に知りませんでした。値の引数に複数のkey:valuesを挿入できなかったので。
コンテナのサブネットを確認してください
lxc network show lxdbr0
fistは次の値でyml(network.yml)ファイルを作成します
version: 1
config:
- type: physical
name: eth1
subnets:
- type: static
ipv4: true
address: <ip>
netmask: 255.255.255.0
gateway: <gateway> // ends often with .1
control: auto
- type: nameserver
address: 8.8.8.8 // for example
このネットワーク構成でコンテナを作成します
lxc launch ubuntu:18.04 test --config=user.network-config="$(cat network.yml)"
voalá:)
コンテナ作成後にIPアドレスを変更してみた
lxc config set <container> user.network-config "$(cat network.yml)"
コンテナーを再起動しましたが、IPが更新されませんでした。コンテナを作成した後、それを機能させる方法を知っている人がいれば、とても感謝しています。
lxdバージョン3.0.1