(ヽ´ω`) < Dockerで--cap-addオプションを試す
(ヽ´ω`) < さて、
docker run
コマンドに--privileged
オプションを渡すことで、コンテナに上位権限を渡せることは確認できた。が、Linux Capabilitiesに準拠しているという公式ドキュメントの記述とは裏腹に、--privileged
オプションでは、全ての権限を渡してしまう。
新しいバージョンのDockerでは--cap-add, --cap-drop
オプションで、付与するLinux Capabilitiesを指定できるとの事だったので、実際に確かめてみる。
(ヽ´ω`) < Ubuntuよ、お前もか
2014/10/04時点でのCentOS7の公式リポジトリからダウンロード可能なDockerのバージョンは以下の通り。
[root@localhost ~]# docker --version Docker version 0.11.1-dev, build 02d20af/0.11.1
このバージョンでは、--cap-add
オプションを渡すと以下の様なエラーが出力される。
[root@localhost ~]# docker run -i -t --rm --cap-add=SYS_TIME centos:centos6 /bin/bash flag provided but not defined: --cap-add
要するにこのバージョンでは--cap-add
は未実装ですよ、と。
それならUbuntu辺りですかねー、とUbuntuで試してみたところ。
test@test-virtual-machine:~$ sudo docker.io run -i -t --cap-add=SYS_TIME centos:centos6 /bin/bash
flag provided but not defined: --cap-add
(ヽ´ω`) < …
test@test-virtual-machine:~$ sudo docker.io --version Docker version 1.0.1, build 990021a
と、まぁ1.0.1でも未だ実装されておらず。
(ヽ´ω`) < 1.2.0をaptでいれる
ということで、UbuntuのリポジトリではなくDockerのリポジトリを使う。設定は下記URLを参考に
Getting Docker Installed on Ubuntu 12.04 LTS – Composite Code
$ wget -qO- https://get.docker.io/gpg | sudo apt-key add -
$ sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
Docker公式サイトからGPGキーをダウンロード&追加、sources.listにDockerのリポジトリを追加して、apt-get update
からのapt-get install
パッケージ名がlxc-docker
となっているので注意。
インストール後、バージョンを確認。
test@test-virtual-machine:~$ sudo docker --version Docker version 1.2.0, build fa7b24f
(ヽ´ω`) < よしよし
(ヽ´ω`) < 今度こそうまくいくはず
これで--cap-add
オプションを試してみる。これで上手く行かなかったら、しばらくDockerは触らないようにしよう。
test@test-virtual-machine:~$ sudo docker run -i -t --cap-add=SYS_TIME --rm centos:centos6 /bin/bash ## システム時間の変更はOK bash-4.1# date -s "2000/01/01 00:00:00" Sat Jan 1 00:00:00 GMT 2000 bash-4.1# date Sat Jan 1 00:00:02 GMT 2000 ## ルーティングテーブルの変更はNET_ADMINがないのでNG bash-4.1# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.17.42.1 0.0.0.0 UG 0 0 0 eth0 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 bash-4.1# route add -net 192.168.0.0/24 gw 172.17.254.254 eth0 SIOCADDRT: Operation not permitted bash-4.1#
(ヽ´ω`) < よしよし
(ヽ´ω`) < ここまで調べてなんだけど
実運用でDockerを使う機会はまだまだきそうにないし、検証環境なら問答無用で--privileged
オプション付与でいいんですよね…