s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

CentOS7の検証: Dockerを一般ユーザーで管理できるようにする。

※ 2016/08/18追記

0.9.0 (2014-03-10) にて -G オプションが追加されたので本記事の対応は不要になりました。

docker/CHANGELOG.md at master · docker/docker · GitHub

Add a -G option to specify the group which unix sockets belong to.

追記終わり。


Dockerのsocketファイルは/var/run/docker.sockに配置されている。

[root@c7-client01 system]# ll /var/run/docker.sock
srw-rw---- 1 root contentsuser 0 Jan 10 18:06 /var/run/docker.sock

このsocketのOwner, Permissionを変更することで、
一般ユーザーでDockerを管理できるようにしたいと思ったのが今回の話。
環境は以下の通り。

CentOS Linux release 7.0.1406 (Core)
docker-1.2.0-1.8.el7.centos.x86_64
systemd-208-11.el7_0.5.x86_64

/lib/systemd/system/docker.socket を見ると

SocketUser=root
SocketGroup=docker

という記述がありここを編集すればsocketファイルのOwnerを変更できそうである。
実際に編集してDockerを再起動してみたが、socketファイルのOwnerは変更されない。

調べてみるとそれらしき情報を見つけた。
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=752555

# These are only available in systemd 214+
#SocketUser=root
#SocketGroup=docker

ということらしい。
上の情報の通り、

ExecStartPost=/bin/chown root:<another group> /var/run/docker.sock

の記述を/lib/systemd/system/docker.serviceに追加してみたがうまくいかない。

docker.socketでsocketが作られた後、
docker.serviceの
ExecStart=/usr/bin/docker -d $OPTIONS $DOCKER_STORAGE_OPTIONS
でdockerが起動するときにデフォルトの設定に上書きされてしまうようである。

最終的に
/lib/systemd/system/docker.serviceExecStartPost=/bin/chown~
の記述を追記することで回避。