Qiitaからの移動


この記事に関連して,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