Provided by: lxc_1.0.10-0ubuntu1.1_amd64 

NAME
lxc.container.conf - LXC コンテナ設定ファイル
説明
linux コンテナ (lxc) は、常に使用する前に作成されます。 コンテナは、プロセスがコンテナを使う時に仮想化/隔
離するシステムリソースのセットを定義することによって作成します。 デフォルトでは、pid, sysv ipc, マウント
ポイントが仮想化され、隔離されます。 他のシステムリソースは、設定ファイルで明確に定義されない限りは、コン
テナをまたいで共有されます。 例えば、もしネットワークが設定されていなければ、コンテナを作成する側とコンテ
ナでネットワークを共有します。 しかし、ネットワークが指定されれば、新しいネットワークスタックがコンテナ用
に作成され、コンテナは作成元の環境のネットワークを使いません。
設定ファイルは、コンテナに割り当てられる様々なシステムリソースを定義します。 現時点では、utsname、ネット
ワーク、マウントポイント、root ファイルシステム、ユーザ名前空間、control groups がサポートされます。
設定ファイルのオプション一つを、key = value の形で一行で表します。 '#' は、その行はコメントであることを示
します。 ケーパビリティや cgroup のオプションのような、リスト形式で指定するオプションでは、value がない形
式で指定できます。このように使うと、それ以前に定義した値をすべてクリアします。
設定
複数の関係するコンテナの管理を容易にするために、コンテナの設定ファイルに別のファイルをロードすることが可
能です。 例えば、ネットワークの設定を、複数のコンテナから include させるように 1 つのファイルに定義するこ
とが可能です。 その場合、コンテナが他のホストに移動すると、そのファイルだけを更新する必要があるかもしれま
せん。
lxc.include
include させたいファイルを指定します。 include するファイルは、lxc 設定ファイルのフォーマットとし
て有効でなければいけません。
アーキテクチャ
コンテナに対してアーキテクチャを設定することが可能です。 例えば、64 ビットのホスト上で 32 ビットのバイナ
リを動かすために 32 ビットアーキテクチャを設定することが可能です。 この設定を行うことにより、パッケージの
ダウンロードを行うなどの作業のうち、アーキテクチャ名に依存するような作業を行うコンテナスクリプトの修正を
行います。
lxc.arch
コンテナに設定するアーキテクチャを指定します。
有効なオプションは以下です。 x86, i686, x86_64, amd64
ホスト名
utsname セクションは、コンテナに設定されるホスト名を定義します。 コンテナは、システムのホスト名を変えるこ
となく、自身のホスト名を持つ事が可能です。 このことにより、ホスト名はコンテナ専用となります。
lxc.utsname
コンテナのホスト名を指定します。
クリーンなシャットダウン時のシグナル
lxc-stop がコンテナをクリーンにシャットダウンするためにコンテナの init プロセスに送るシグナル名か番号を指
定することができます。 init システムによって、クリーンなシャットダウンを行うために使うシグナルは異なりま
す。 このオプションではシグナルとして kill(1) で使う形式を指定することができます。 例えば SIGKILL,
SIGRTMIN+14, SIGRTMAX-10 のような形式、もしくは数字を指定します。デフォルトのシグナルは SIGPWR です。
lxc.haltsignal
コンテナをシャットダウンするのに使うシグナルを指定します
強制停止時のシグナル
lxc-stop がコンテナを強制的にシャットダウンするために送るシグナル名か番号を指定することができます。 この
オプションではシグナルとして kill(1) で使う形式を指定することができます。 例えば SIGKILL, SIGRTMIN+14,
SIGRTMAX-10 のような形式、もしくは数字を指定します。デフォルトのシグナルは SIGKILL です。
lxc.stopsignal
コンテナを停止するのに使用するシグナルを指定します。
ネットワーク
ネットワークセクションは、コンテナ内でどのようにネットワークを仮想化するかを定義します。 ネットワークの仮
想化はレイヤー 2 で作動します。 ネットワークの仮想化を使用するためには、コンテナのネットワークインター
フェースを定義しなければなりません。 いくつかの仮想インターフェースをアサインすることができます。 そし
て、仮に物理ネットワークインターフェースが一つしかなくても、コンテナ内でいくつもの仮想インターフェースを
使うことができます。
lxc.network
値を指定せずに使い、それ以前に定義されたすべてのネットワークオプションをクリアできます。
lxc.network.type
コンテナがどの種類のネットワーク仮想化を使うかを指定します。 一つのネットワークの設定ごとに
lxc.network.type フィールドを指定します。 このように、一つのコンテナに複数のネットワークインター
フェースを割り当てることができるだけでなく、同じコンテナに対して複数のネットワーク仮想化の種類を指
定することが出来ます。 仮想化の種類は以下の値を取る事が出来ます:
none: ホストのネットワーク名前空間を共有します。 これにより、ホストのネットワークデバイスをコンテ
ナ内で使うことが可能になります。 もしコンテナもホストも init として upstart を使っている場合、(例
えば) コンテナ内で 'halt' を実行すると、ホストがシャットダウンしてしまうことにもなります。
empty: ループバックインターフェースだけを作成します。
veth: 一方がコンテナに、もう一方が lxc.network.link オプションで指定されたブリッジに接続されるペア
の仮想イーサネットデバイスを作成します。 もし、ブリッジが指定されていない場合、veth ペアデバイスは
作成されますが、ブリッジには接続されません。 ブリッジはコンテナが開始する前にシステムで事前に設定
しておく必要があります。 lxc はコンテナ外の設定を扱うことはありません。 デフォルトでは、lxc がコン
テナの外部に属するネットワークデバイスに対する名前を決定します。 しかし、もしこの名前を自分で指定
したい場合、lxc.network.veth.pair オプションを使って名前を設定し、lxc に対して指定をすることができ
ます (非特権コンテナの場合をのぞきます。セキュリティ上の理由からこのオプションは無視されます)。
vlan: vlan インターフェースは lxc.network.link で指定されたインターフェースとリンクし、コンテナに
割り当てられます。 vlan の指定は lxc.network.vlan.id オプションで指定します。
macvlan: macvlan インターフェースは lxc.network.link により指定されるインターフェースとリンク
し、コンテナに割り当てられます。 lxc.network.macvlan.mode でモードを指定すると、その macvlan の指
定を、同じ上位デバイスで異なる macvlan の間の通信をする時に使います。 受け入れられたモードが
private であれば、デバイスは同じ上位デバイスの他のデバイスとの通信を行いません (デフォルト)。 新し
い仮想イーサネットポート集約モード (Virtual Ethernet Port Aggregator (VEPA)) である vepa は、隣接
したポートが、ソースとデスティネーションの両方が macvlan ポートに対してローカルであるフレームを全
て返すと仮定します。 すなわち、ブリッジが reflective relay として設定されているということです。 上
位デバイスから入ってくるブロードキャストフレームは、VEPA モードである全ての macvlan インターフェー
スに送りつけられます。 ローカルのフレームはローカルには配送されません。 bridge の指定は、同じポー
トの異なる macvlan インターフェースの間のシンプルなブリッジとして動作します。 あるインターフェース
から他のインターフェースへのフレームは、直接配送され、外部には送出されません。 ブロードキャストフ
レームは、全ての他のブリッジと外部のインターフェースに対して送られます。 しかし、reflective relay
からフレームが返ってきたときは、再度それを配送することはしません。 全ての MAC アドレスを知っている
ので、ブリッジモジュールのように、macvlan ブリッジモードは学習や STP の必要はありません。
phys: lxc.network.link で指定された、すでに存在しているインターフェースがコンテナに割り当てられま
す。
lxc.network.flags
ネットワークに対して行うアクションを指定します。
up: インターフェースを起動させます。
lxc.network.link
実際のネットワークトラフィックに使うインターフェースを指定します。
lxc.network.mtu
インターフェースに対する MTU を指定します。
lxc.network.name
インターフェース名は動的に割り当てられます。 しかし、もしコンテナが使用する設定ファイルが一般的な
名前を使用するために、他の特定の名前が必要であれば (例えば eth0 など)、コンテナ内のインターフェー
スは、このオプションで指定した名前にリネームされます。
lxc.network.hwaddr
仮想インターフェースの MAC アドレスは、デフォルトでは動的に割り当てられます。 しかし、MAC アドレス
の衝突や、リンクローカルIPv6 アドレスを常に同じにした場合などは、このオプションが必要です。 アドレ
ス中の "x" という文字は、ランダムな値に置き換えられます。 これによりテンプレートに hwaddr を設定す
ることが可能になります。
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 を指定している時だけ
有効となります。
lxc.network.ipv6
仮想インターフェースに割り当てる ipv6 アドレスを指定します。 複数行により複数の ipv6 アドレスを指
定します。 このアドレスは x::y/m というフォーマットで指定します。 例え
ば、2003:db8:1:0:214:1234:fe0b:3596/64。
lxc.network.ipv6.gateway
コンテナでゲートウェイとして使う IPv6 アドレスを指定します。 アドレスは x::y というフォーマットで
す。例えば、2003:db8:1:0::1。 auto という特別な値を記述する事も可能です。 これは (lxc.network.link
で指定した) ブリッジインターフェースの最初のアドレスを使用し、それをゲートウェイに使うという意味に
なります。 auto はネットワークタイプとして veth と macvlan を指定している時だけ有効となります。
lxc.network.script.up
ホスト側から使われる、ネットワークの作成と設定が済んだ後に実行するスクリプトを指定します。 以下の
引数がスクリプトに渡されます: コンテナ名、設定セクション名(net)。 その後の引数はスクリプトのフック
で使われる設定セクションに依存します。 以下がネットワークシステムによって使われます: 実行コンテキ
スト (up)、ネットワークのタイプ (empty/veth/macvlan/phys) ネットワークのタイプによっては、更に別の
引数が渡されるかもしれません: veth/macvlan/phys の場合 (ホスト側の) デバイス名
スクリプトからの標準出力は debug レベルでロギングされます。 標準エラー出力はロギングされません。
しかし、フックの標準エラー出力を標準出力にリダイレクトすることにより保存することは可能です。
lxc.network.script.down
ホスト側から使われる、ネットワークを破壊する前に実行するスクリプトを指定します。 以下の引数がスク
リプトに渡されます: コンテナ名、設定セクション名(net)。 その後の引数はスクリプトのフックで使われる
設定セクションに依存します。 以下がネットワークシステムによって使われます: 実行コンテキスト
(up)、ネットワークのタイプ (empty/veth/macvlan/phys)。 ネットワークのタイプによっては、更に別の引
数が渡されるかもしれません: veth/macvlan/phys。そして最後に (ホスト側の) デバイス名が渡されます。
スクリプトからの標準出力は debug レベルでロギングされます。 標準エラー出力はロギングされません。
しかし、フックの標準エラー出力を標準出力にリダイレクトすることにより保存することは可能です。
新しい擬似端末のインスタンス (DEVPTS)
さらに厳しい隔離のために、コンテナは自身のプライベートな pseudo tty (擬似端末) を持つことが可能です。
lxc.pts
もし設定された場合、コンテナは新しい pseudo tty インスタンスを持ち、それを自身のプライベートとしま
す。 この値は pts インスタンスに許可される pseudo tty の最大数を指定します (この制限はまだ実装され
ていません)。
コンテナのシステムコンソール
コンテナでルートファイルシステムを持つように設定されており、inittab ファイルでコンソールの使用が設定され
ている場合、このコンソールの出力がどこになされるのかを指定したいと思うでしょう。
lxc.console.logfile
コンソール出力を書き込むファイルのパスを指定します。
lxc.console
コンソールを割り当てるデバイスのパスを指定します。'none' というキーワードは、単純にコンソールを無
効にします。 この設定は、アプリケーションが書き込む事ができるコンソールデバイスファイルが rootfs
に存在する場合、メッセージがホスト側に出力されるので危険です。
TTY を通したコンソール
このオプションはコンテナが root ファイルシステムを持つように設定されており、inittab ファイルで tty 上に
getty の起動が設定されている場合に役に立ちます。 このオプションはコンテナで利用できる tty の数を指定しま
す。 inittab ファイルに設定する getty の数は、このオプションの指定する tty の数より大きくしてはいけませ
ん。 さもなければ、超過した分の getty セッションはコンソールか /var/log/messages にうっとうしいメッセージ
を生死を表示しながら、永久に生死を繰り返すでしょう。
lxc.tty
コンテナに作成出来る tty の数を指定します。
コンソールデバイスの位置
LXC のコンソールはホストによって作られ、コンテナ内で要求されたデバイスに bind マウントされた Unix98 PTY
経由で提供されます。 デフォルトでは /dev/console と /dev/ttyN に bind マウントされます。 これはゲスト内で
のパッケージのアップグレードを妨げる可能性があります。 なので /dev 以下のディレクトリを指定することができ
ます。 LXC はこのディレクトリ以下にファイルを作成し、これらのファイルを bind マウントします。 そして、こ
れらの (作成された) ファイルは /dev/console と /dev/ttyN にシンボリックリンクされます。 シンボリックリン
クを消去したり置き換えたりすることは可能ですから、パッケージのアップグレードは成功します。
lxc.devttydir
コンテナのコンソールデバイスを作成するための /dev 以下のディレクトリを指定します。
/DEV ディレクトリ
デフォルトでは、lxc はコンテナの /dev 以下に fd, stdin, stdout, stderr のシンボリックリンクを作成します
が、自動的にはデバイスノードのエントリは作成しません。 これは、コンテナの rootfs で必要な設定を行えるよう
にするものです。 lxc.autodev が 1 に設定されている場合、コンテナの rootfs をマウントした後、LXC は新しい
tmpfs を /dev 以下にマウントします (500k 制限の)。 そして初期デバイスの最小限のセットを作成します。 これ
は、"systemd" ベースの "init" 環境のコンテナを起動する時に通常必要ですが、他の環境の場合はオプショナルな
ものです。 コンテナの /dev ディレクトリ内の追加デバイスは lxc.hook.autodev フックを使用して作成されます。
lxc.autodev
コンテナの起動時に LXC が /dev をマウントして、最小限の /dev を作成しているようにするには、これを
1 に設定してください。
KMSG のシンボリックリンクの有効化
/dev/kmsg の /dev/console へのシンボリックリンクとしての作成を有効にします。デフォルトは 1 です。
lxc.kmsg
/dev/kmsg のシンボリックリンクを無効にするには 0 を設定してください。
マウントポイント
マウントポイントセクションは、マウントするための区別された場所を指定します。 これらのマウントポイント
は、コンテナだけに見え、コンテナ外で実行されるプロセスから見えることはありません。 例えば、/etc や /var
や /home をマウントするときに役に立つでしょう。
注意: 通常 LXC は、マウント対象と相対パス指定のバインドマウントを、適切にコンテナルート以下に閉じ込めま
す。 これは、ホストのディレクトリやファイルに対して重ね合わせを行うようなマウントによる攻撃を防ぎま
す。(絶対パス指定のマウントソース中の各パスがシンボリックリンクである場合は無視されます。) しかし、もしコ
ンテナの設定が最初に、/home/joe のようなコンテナユーザのコントロール配下にあるディレクトリを、コンテナ中
のある path にマウントし、その後 path 以下でマウントが行われるような場合、コンテナユーザがタイミングを見
計らって自身のホームディレクトリ以下でシンボリックリンクを操作するような TOCTTOU 攻撃が成立する可能性があ
ります。
lxc.mount
マウント情報の書かれた fstab フォーマットで書かれたファイルの場所を指定します。 マウントする場所は
相対バスで書くことができます。そして、ほとんどの場合にコンテナの root からの相対パスとなるはずで
す。例えば、以下のように書きます。
proc proc proc nodev,noexec,nosuid 0 0
.fi
この例は、root ファイルシステムがどこにあっても、コンテナの /proc 以下に proc ファイルシステムをマウントします。
これは、ブロックデバイスがバックエンドのファイルシステムだけでなく、コンテナのクローンにも柔軟に対応できます。
ファイルシステムがイメージファイルやブロックデバイスからマウントされている場合、3 つ目のフィールド (fs_vfstype) は
mount(8)
のように auto を指定することはできず、明確に指定しなければいけません。
lxc.mount.entry
fstab フォーマットの一行と同じフォーマットのマウントポイントの指定をします。
fstab フォーマットに加えて、LXC ではマウントに対して独自の 2 つのオプションが使えます。
optional は、マウントが失敗しても失敗を返さずに無視します。
create=dir と create=file は、マウントポイントをマウントする際にディレクトリもしくはファイルを作成します。
lxc.mount.auto
標準のカーネルファイルシステムで自動的にマウントするものを指定します。
これは劇的に設定を容易にする可能性があります。
• proc:mixed (or proc):
/proc を読み書き可能でマウントします。
ただし、/proc/sys と /proc/sysrq-trigger は、セキュリティとコンテナの隔離の目的でリードオンリーで再マウントされます。
• proc:rw:
/proc を読み書き可能でマウントします。
• sys:ro (or sys):
/sys を、セキュリティとコンテナの隔離の目的でリードオンリーでマウントします。
• sys:rw:
/sys を読み書き可能でマウントします。
• cgroup:mixed:
/sys/fs/cgroup を tmpfs でマウントし、そのコンテナの追加が行われた全ての階層構造に対するディレクトリを作製し、その cgroup の名前でその中にサブディレクトリを作製し、そのコンテナ自身の cgroup をそのディレクトリにバインドマウントします。
コンテナは自身の cgroup ディレクトリに書き込みが可能ですが、親ディレクトリはリードオンリーで再マウントされているため書き込めません。
• cgroup:ro:
cgroup:mixed と同様にマウントされますが、全てリードオンリーでマウントされます。
• cgroup:rw:
cgroup:mixed と同様にマウントされますが、全て読み書き可能でマウントされます。
コンテナ自身の cgroup に至るまでのパスも書き込み可能になることに注意が必要ですが、cgroup ファイルシステムにはならず、
/sys/fs/cgroup の tmpfs の一部分になるでしょう。
• cgroup (マウントオプションなしの場合):
コンテナが CAP_SYS_ADMIN ケーパビリティを保持している場合、cgroup:rw となります。保持していない場合、cgroup:mixed となります。
• cgroup-full:mixed:
/sys/fs/cgroup を tmpfs でマウントし、そのコンテナの追加が行われた全ての階層構造に対するディレクトリを作製し、ホストからコンテナまでの階層構造を全てバインドマウントし、コンテナ自身の cgroup を除いてリードオンリーにします。
cgroup と比べると、コンテナ自身の cgroup に至るまでの全てのパスが tmpfs の下層のシンプルなディレクトリとなり、コンテナ自身の cgroup の外ではリードオンリーになりますが、/sys/fs/cgroup/$hierarchy はホストの全ての cgroup 階層構造を含みます。
これにより、コンテナにはかなりの情報が漏洩します。
• cgroup-full:ro:
cgroup-full:mixed と同様にマウントされますが、全てリードオンリーでマウントされます。
• cgroup-full:rw:
cgroup-full:mixedと同様にマウントされますが、全て読み書き可能でマウントされます。
この場合、コンテナは自身の cgroup から脱出する可能性があることに注意してください (コンテナが CAP_SYS_ADMIN を持ち、自身で cgroup ファイルシステムをマウント可能なら、いずれにせよそのようにするかもしれないことにも注意してください)。
• cgroup-full (マウントオプションなしの場合):
コンテナが CAP_SYS_ADMIN ケーパビリティを保持している場合、cgroup-full:rw となります。保持していない場合、cgroup-full:mixed となります。
cgroup ファイルシステムの自動マウントが有効の場合、/sys/fs/cgroup 以下の tmpfs は常に読み書き可能でマウントされることに注意が必要です (しかし :mixed と :ro の場合は、個々の階層の /sys/fs/cgroup/$hierarchy は読み込み専用となるでしょう)。これは Ubuntu の
mountall(8)
コマンドの特異な動きに対処するためのものです。特異な動きとは、/sys/fs/cgroup が読み込み専用でマウントされた状態で、コンテナが CAP_SYS_ADMIN を持たない場合、/sys/fs/cgroup を読み書き可能で再マウントしようとしてできないため、コンテナのブート時にユーザからの入力を待ってしまうというものです。
例:
lxc.mount.auto = proc sys cgroup
lxc.mount.auto = proc:rw sys:rw cgroup-full:rw
ルートファイルシステム
コンテナのルートファイルシステムは、ホストのルートファイルシステムと異なるようにすることも可能です。
lxc.rootfs
コンテナのルートファイルシステムを指定します。 この値はイメージファイル、ディレクトリ、ブロックデ
バイスのどれかを取ることができます。 もし指定されない場合、コンテナはホストとルートファイルシステ
ムを共有します。
lxc.rootfs.mount
root ファイルシステムの変更の前に、lxc.rootfs を再帰的にどこにバインドするのかを指定します。これは
pivot_root(8) システムコールが確実に成功する事を保証します。 どんなディレクトリでも良く、デフォル
トでも通常は動くはずです。
lxc.rootfs.options
rootfs をマウントするときに追加したいマウントオプション。
lxc.pivotdir
元の root ファイルシステムを、lxc.rootfs 以下のどこに移動させるかを lxc.rootfs からの相対パスで指
定します。 デフォルトは mnt です。 これはもし必要であれば作成され、そしてコンテナのセットアップの
間、全てアンマウントされた後で消去されます。
CONTROL GROUP
CONTROL GROUP セクションは、(lxc とは) 別のサブシステムの設定を含みます。 lxc は、このサブシステム名の正
しさはチェックしません。 実行時のエラーを検出するのに不便ですが、別の将来のサブシステムをサポート出来ると
いう有利な点もあります。
lxc.cgroup.[subsystem name]
設定する control group の値を指定します。 サブシステム名は、control group のそのままの名前です。
許される名前や値の書式は LXC が指示することはなく、コンテナが実行された時に実行されている Linux
カーネルの機能に依存します。 例えば lxc.cgroup.cpuset.cpus
ケーパビリティ
コンテナが root 権限で実行されていても、コンテナ内ではケーパビリティ (capabilities) を削除する事は可能で
す。
lxc.cap.drop
コンテナ内で削除するケーパビリティ (capability) を指定します。 一行でスペース区切りで複数のケーパ
ビリティを指定することも可能です。 指定は、"CAP_" というプレフィックスなしで、小文字でケーパビリ
ティを指定します。 例えば、CAP_SYS_MODULE というケーパビリティは sys_module と指定する必要がありま
す。 詳しくは以下を参照してください。 capabilities(7) この設定を、値を指定しない状態で使った場
合、それ以前に指定された削除対象のケーパビリティの指定をすべてクリアします (lxc.cap.drop に何も指
定しない状態になります)。
lxc.cap.keep
コンテナ内で維持するケーパビリティを指定します。 指定した以外の全てのケーパビリティはドロップされ
ます。
APPARMOR プロファイル
lxc が apparmor サポートでコンパイルされ、インストールされている場合で、ホストで apparmor が有効な場
合、コンテナが従って動くべき apparmor プロファイルは、コンテナの設定で指定することが可能です。 デフォルト
は lxc-container-default です。
lxc.aa_profile
コンテナが従うべき apparmor プロファイルを指定します。 コンテナが apparmor による制限を受けないよ
うに設定するには、以下のように設定します。
lxc.aa_profile = unconfined
SELINUX コンテキスト
lxc が SELinux サポートでコンパイルされ、インストールされている場合で、ホストで SELinux が有効な場合、コ
ンテナが従って動くべき SELinux コンテキストは、コンテナの設定で指定することが可能です。 デフォルトは
unconfined_t であり、これは lxc がコンテキストを変えないという意味になります。 ポリシーの例と追加の情報は
/usr/share/lxc/selinux/lxc.te ファイルを参照してください。
lxc.se_context
コンテナが従うべき SELinux コンテキストを指定するか、unconfined_t を指定します。例えば以下のように
設定します。
lxc.se_context = system_u:system_r:lxc_t:s0:c22
SECCOMP の設定
コンテナは、起動時に seccomp プロファイルをロードすることで、利用可能なシステムコールを減らして起動するこ
とが可能です。 seccomp の設定ファイルは、1 行目がバージョン番号、2 行目がポリシーのタイプで始まる必要があ
り、その後に設定を書きます。
現時点では、バージョン番号は 1 と 2 をサポートしています。バージョン 1 では、ポリシーはシンプルなホワイト
リストですので、2 行目は "whitelist" でなければなりません。 そして残りの行には 1 行に 1 つずつ、システム
コール番号を書きます。各行のシステムコール番号がホワイトリスト化され、リストにない番号は、そのコンテナで
はブラックリストに入ります。
バージョン 2 では、ポリシーはブラックリストもしくはホワイトリストで表され、ルールごとのアクションと、ポリ
シーごとのデフォルトのアクションを設定できます。そして、アーキテクチャごとの設定と、テキストで書かれたシ
ステムコール名での設定が可能です。
以下にブラックリストのポリシーの例を示します。これは mknod 以外の全てのシステムコールが許可され、mknod が
呼ばれると、何もせずに単に 0(成功) を返します。
2
blacklist
mknod errno 0
.fi
lxc.seccomp
コンテナがスタートする前にロードする seccomp の設定を含むファイルを指定します。
UID のマッピング
コンテナは、ユーザとグループの id のマッピングを持った専用のユーザ名前空間で起動することが可能です。 たと
えば、コンテナ内のユーザ id 0 を、ホストのユーザ id 200000 にマッピングすることが可能です。 コンテナの
root ユーザはコンテナ内では特権を持ちますが、ホストでは特権を持ちません。 通常は、システムコンテナは id
の範囲を要求し、それをマッピングします。 例えば、コンテナ内のユーザとグループの id 0 から 20,000 を
200,000 から 220,000 にマッピングします。
lxc.id_map
4 つの値を記述する必要があります。 最初の文字は 'u' か 'g' のどちらかで、ユーザかグループの ID の
どちらをマッピングするかを指定します。 次はコンテナのユーザ名前空間内に現れる最初のユーザ ID で
す。 その次は、そのユーザ ID のホスト上での値です。 最後は、ID のマッピングをいくつ連続して行うか
の数を指定します。
コンテナのフック
コンテナのフックは、コンテナの存続期間の色々な場面で実行することのできるプログラムやスクリプトです。
コンテナのフックが実行されるとき、情報がコマンドライン引数と環境変数の両方を通して渡されます。引数は:
• コンテナ名
• セクション (常に 'lxc')
• フックのタイプ ('clone' や 'pre-mount' など)
• 追加の引数。clone フックの場合、lxc-clone に渡される追加の引数は、フックへの引数として追加されます。
以下の環境変数がセットされます。
• LXC_NAME: コンテナ名
• LXC_ROOTFS_MOUNT: マウントされた root ファイルシステムへのパス
• LXC_CONFIG_FILE: コンテナの設定ファイルのパス
• LXC_SRC_NAME: clone フックの場合、元のコンテナの名前
• LXC_ROOTFS_PATH: コンテナの lxc.rootfs エントリ。これはマウントされた rootfs が存在する場所にはならない
でしょう。それには LXC_ROOTFS_MOUNT を使用してください。
スクリプトからの標準出力は debug レベルでロギングされます。 標準エラー出力はロギングされません。 しか
し、フックの標準エラー出力を標準出力にリダイレクトすることにより保存することは可能です。
lxc.hook.pre-start
コンテナの tty、コンソールの作成、マウントが実行される前に、ホストの名前空間内で実行するフック。
lxc.hook.pre-mount
コンテナのファイルシステムの名前空間で実行されますが、rootfs が設定される前に実行するフック。 これ
により rootfs の操作が可能になります。 例えば、暗号化されたファイルシステムのマウントなどです。 こ
のフック内でなされるマウントはホストには影響しません (mounts propagation を除いて)。 なので、それ
らはコンテナがシャットダウンする時に自動的にクリーンアップされます。
lxc.hook.mount
マウントが完了した後ですが、pivot_root の前にコンテナの名前空間で実行されるフック。
lxc.hook.autodev
lxc.autodev == 1 が設定されている場合で、マウントが完了し、マウント時のフックも実行された後です
が、pivot_root の前にコンテナの名前空間で実行するフック。 このフックの目的は、systemd ベースのコン
テナ向けの autodev オプションが設定されている時に、コンテナの /dev ディレクトリを設定するのを支援
することです。コンテナの /dev ディレクトリは、このフックが実行される時有効な ${LXC_ROOTFS_MOUNT}
環境変数からの相対パスとなります。
lxc.hook.start
コンテナの init が実行される直前にコンテナの名前空間で実行されるフック。 コンテナ内で利用可能なプ
ログラムである必要があります。
lxc.hook.post-stop
コンテナがシャットダウンされた後にホストの名前空間で実行するフック。
lxc.hook.clone
コンテナが新しいコンテナにクローンされる際に実行されるフック。詳しくは lxc-clone(1) を参照してくだ
さい。
コンテナのフックで使える環境変数
起動時のフックに設定情報を提供し、フックの機能を助けるための環境変数がいくつか利用可能です。 全ての変数が
全てのコンテキストで利用可能なわけではありません。 具体的には、全てのパスはホストシステム上のパスであ
り、そのため、lxc.hook.start フックの時点では使用できません。
LXC_NAME
LXC コンテナの名前。共通のログ環境内でのログメッセージに使うときに便利です。[-n]
LXC_CONFIG_FILE
コンテナの設定ファイルのホスト上でのパス。 これは、他の方法では得られない追加の設定情報を見つける
ために、コンテナに、元の、トップレベルの設定ファイルの位置を与えるものです。 [-f]
LXC_CONSOLE
設定されている場合のコンテナのコンソール出力のパス。 [-c] [lxc.console]
LXC_CONSOLE_LOGPATH
設定されている場合のコンテナのコンソールログ出力のパス。 [-L]
LXC_ROOTFS_MOUNT
初期にコンテナがマウントされる場所。 これは、コンテナインスタンスが起動するためのコンテナの rootfs
へのホスト上のパスであり、インスタンスのための移行が行われる場所です。 [lxc.rootfs.mount]
LXC_ROOTFS_PATH
rootfs.mount へマウントされるコンテナのルートへのホスト上のパスです。
ロギング
ロギングはコンテナごとに設定することが可能です。 デフォルトでは、lxc パッケージのコンパイル条件に依存
し、コンテナのスタートアップは ERROR レベルでのみロギングされ、コンテナのパス以下か、/var/log/lxc 以下の
どちらかにコンテナ名 (の後に '.log' が付与される) をもとにした名前でロギングされます。
デフォルトのログレベルとログファイルは両方とも、コンテナの設定ファイル内で指定され、デフォルトの値を上書
きします。 同様に、設定ファイルのエントリは lxc-start のコマンドラインオプションで上書きすることも可能で
す。
lxc.loglevel
ログを取得するレベル。 ログレベルは 0..8 の範囲の整数です。 数字が小さいほど冗長なデバッグを意味し
ます。 具体的には、0 = trace, 1 = debug, 2 = info, 3 = notice, 4 = warn, 5 = error, 6 = critical,
7 = alert, and 8 = fatal です。 指定されない場合、レベルのデフォルトは 5 (error) で、それ以上のエ
ラーがロギングされます。
(フックスクリプトやネットワークインターフェースの起動、停止時のスクリプトのような) スクリプトが呼
ばれた時、スクリプトの標準出力は level 1 の debug でロギングされます。
lxc.logfile
ログ情報を書き込むファイル。
自動起動
自動起動オプションでは、自動起動させるコンテナと順番の設定が可能です。 このオプションは LXC ツールが直接
使用するか、ディストリビューションが提供する外部ツールが使用するかもしれません。
lxc.start.auto
コンテナを自動起動させるかどうかを設定します。 有効な値は 0(オフ) か 1(オン) です。
lxc.start.delay
コンテナを起動させた後、次のコンテナを起動させるまでにどれくらい (秒) 待つかを設定します。
lxc.start.order
多数の自動起動させるコンテナがある場合のコンテナの起動順を決めるのに使う整数を指定します。
lxc.group
コンテナを追加したいコンテナグループ名を指定します。 複数の値を設定でき、複数回指定することもでき
ます。 設定されたグループは、関連する一連のコンテナを起動させるために使われます。
自動起動とシステムブート
コンテナはいくつでもグループに属することができ、全く属さないことも可能です。特別なグループが 2 つ存在しま
す。1 つは NULL グループです。これはどのグループにも属さないコンテナです。もう 1 つは "onboot" グループで
す。
LXC サービスが有効になった状態でシステムがブートすると、最初に "onboot" グループのメンバーである
lxc.start.auto == 1 が設定されたコンテナを起動しようとします。起動は lxc.start.order の順に起動します。
lxc.start.delay が指定されている場合、現在対象となっているコンテナに初期化の時間を与え、ホストシステムの
負荷を低減するために、次のコンテナを開始させるまでに遅延時間を与えます。 "onboot" グループのメンバーが開
始した後、LXC システムは lxc.start.auto == 1 が設定された、どのグループのメンバーでもない (NULL グループ
の) コンテナのブートを onboot グループのコンテナと同様に開始します。
例
以下に紹介するいくつかの例に加えて、他の設定例が /usr/share/doc/lxc/examples にあります。
ネットワーク
この設定は、片方をブリッジである br0 と接続される veth ペアデバイスを使うコンテナを設定します (ブリッジは
管理者によりあらかじめシステム上に設定済みである必要があります)。 仮想ネットワークデバイスは、コンテナ内
では eth0 とリネームされます。
lxc.utsname = myhostname
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.hwaddr = 4a:49:43:49:79:bf
lxc.network.ipv4 = 1.2.3.5/24 1.2.3.255
lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
UID/GID のマッピング
この設定は、コンテナ内のユーザとグループ両方の id 0-9999 の範囲を、ホスト上の 100000-109999 へマッピング
します。
lxc.id_map = u 0 100000 10000
lxc.id_map = g 0 100000 10000
CONTROL GROUP
この設定は、アプリケーションのための control group をいくつか設定します。 cpuset.cpus は定義された cpu の
み使用できるように制限します。 cpus.share は、control group の (cpu) 優先度を指定します。 devices.allow
は、特定のデバイスを使用可能にします。
lxc.cgroup.cpuset.cpus = 0,1
lxc.cgroup.cpu.shares = 1234
lxc.cgroup.devices.deny = a
lxc.cgroup.devices.allow = c 1:3 rw
lxc.cgroup.devices.allow = b 8:0 rw
複雑な設定
この例は、control group を使って、複雑なネットワークスタックを作成し、新しいホスト名を指定し、いくつかの
場所をマウントし、ルートファイルシステムを変更するような複雑な設定を示します。
lxc.utsname = complex
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.hwaddr = 4a:49:43:49:79:bf
lxc.network.ipv4 = 10.2.3.5/24 10.2.3.255
lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597
lxc.network.ipv6 = 2003:db8:1:0:214:5432:feab:3588
lxc.network.type = macvlan
lxc.network.flags = up
lxc.network.link = eth0
lxc.network.hwaddr = 4a:49:43:49:79:bd
lxc.network.ipv4 = 10.2.3.4/24
lxc.network.ipv4 = 192.168.10.125/24
lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596
lxc.network.type = phys
lxc.network.flags = up
lxc.network.link = dummy0
lxc.network.hwaddr = 4a:49:43:49:79:ff
lxc.network.ipv4 = 10.2.3.6/24
lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3297
lxc.cgroup.cpuset.cpus = 0,1
lxc.cgroup.cpu.shares = 1234
lxc.cgroup.devices.deny = a
lxc.cgroup.devices.allow = c 1:3 rw
lxc.cgroup.devices.allow = b 8:0 rw
lxc.mount = /etc/fstab.complex
lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0
lxc.rootfs = /mnt/rootfs.complex
lxc.cap.drop = sys_module mknod setuid net_raw
lxc.cap.drop = mac_override
SEE ALSO
chroot(1), pivot_root(8), fstab(5) capabilities(7)
SEE ALSO
lxc(7), lxc-create(1), lxc-destroy(1), lxc-start(1), lxc-stop(1), lxc-execute(1), lxc-console(1), lxc-
monitor(1), lxc-wait(1), lxc-cgroup(1), lxc-ls(1), lxc-info(1), lxc-freeze(1), lxc-unfreeze(1), lxc-
attach(1), lxc.conf(5)
作者
Daniel Lezcano <daniel.lezcano@free.fr>
2017-08-01 lxc.container.conf(5)