この記事に関連して,root権限のないdockerコンテナを起動する方法を探していた.
dockerとroot権限というと,sudo
なしでdockerを利用する方法ばかりヒットして,コンテナ起動に関するWeb記事が全く見つからない.
やむを得ずhelpを見たら,あっさり解決したので,メモとして投稿.
目標
ホスト側root権限の必要な操作がコンテナからできない事
方法
helpを見た結果,次のようにすればできた.
-u
オプションは,UID,GIDを指定してコンテナを起動するためのオプションなので,ここに${UID}
,${GID}
を指定してやればよい.
$ sudo docker -u ${UID}:${GID} <その他のオプション> <イメージ名>
これで,xhost local:root
みたいなことをしなくても済むし(xhost local:${USER}
は残念ながら必要だった),アプリケーションとしてdockerを使う事に対する不安感が減らせるとおもう.docker
起動時にroot権限が必要な点は,個人使用の範疇ならどうにかできるんじゃないかな.
目標達成ができているか確認
凄い雑に,上の目標が達成できているか確認した.
まず,/tmp
に読み込みにホストのroot権限が必要なファイルを作る.
$ mkdir /tmp/docker-test
$ su
# echo foo > /tmp/docker-test/foo
# exit
$ sudo chmod 600 /tmp/docker-test/foo
$ cat /tmp/docker-test/foo
cat: /tmp/docker-test/foo: 許可がありません
$ sudo cat /tmp/docker-test/foo
foo
次に,この/tmp/docker-test
をデータボリュームとして利用し,foo
をコンテナから読もうとしてみる.
-u
オプションなし
結局のところrootプロセスで動いているので,当然読めてしまう.
$ sudo docker run -v /tmp/docker-test:/home -ti --rm ubuntu:14.04
root@6e87dcde582e:/# cat /home/foo
foo
-u
オプションあり
単純な方法では読めなくなっている.が,dockerの権限周りを完全に理解して大丈夫なことを確認したわけではないので,抜け道はあるかもしれない.
$ sudo docker run -v /tmp/docker-test:/home -ti --rm -u $UID:$GID ubuntu:14.04
I have no name!@69833ade7f0b:/$ cat /home/foo
cat: /home/foo: Permission denied