Posted at: 2017-01-29 20:42:03  Category: infra

タイトルの通りです。

lxcで非特権コンテナを動かしてみたのですが、

いろいろハマりどころがありました。



うまくいった手順をのこしておきます。



環境



$ uname -a

4.4.0-59-generic #80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

$ lxc-info --version

2.0.6



手順



$ sudo apt-get install lxc cgmanager cgmanager-utils lxc-templates uidmap

$ less /etc/subuid

=> 非特権コンテナを動作させたいユーザーの記述があることを確認

(ex.) USER:100000:65536

=> uidの100000から65536個をコンテナの内部の?アカウントに割り当てる

という意味らしい

$ less /etc/subgid

=> 非特権コンテナを動作させたいユーザーの記述があることを確認

(ex.) USER:100000:65536

=> gidの100000から65536個をコンテナの内部の?グループに割り当てる

という意味らしい

$ sudo vim /etc/lxc/lxc-usernet

=> 非特権コンテナを起動させたいユーザがvethを

bridgeに接続できるようにする設定を行う

(ex.) user veth bridge0 10

=> bridge0にvethデバイスを10個作成できるという意味らしい

$ sudo vim /etc/network/interfaces

=> /etc/lxc/lxc-usernet 中に記載した ブリッジを作成する

= (ex.)

auto eth0$

iface eth0 inet static$

address 0.0.0.0$

$

auto bridge0$

iface bridge0 inet static$

address 192.168.1.100$

netmask 255.255.255.0$

network 192.168.1.0$

broadcast 192.168.1.255$

gateway 192.168.1.1$

bridge_ports eth0$

bridge_stp off$

bridge_maxwait 1$

dns-nameservers 192.168.1.1



$ mkdir ~/.config/lxc

$ cp /etc/lxc/default.conf ~/.config/lxc/

$ vim ~/.config/lxc/default.conf

=> lxc.id_map = u 0 100000 65536

lxc.id_map = g 0 100000 65536

上記2行を追加する

/etc/sub[u|g]id にある記載と合わせる必要がある

コンテナ内のユーザ/グループIDは0から始まる

ホストの100000から65536個を使用する意味がある

=> lxc.network.link の値を作成したブリッジの名前に変項する



$ lxc-create -t download -n container-name

=> download を指定しているのは

特別なイメージが必要とされから(非特権コンテナを使う場合)



$ sudo cgm create all $USER

$ sudo cgm chown all $USER $(id -u) $(id -g)

$ cgm movepid all $USER $$



$ lxc-start -n container-name

=> コンテナが起動する

/etc/network/interfacesの編集をよしなにする