CentOS7.3でsudoを使用せずに、dockerコマンドを実行する。
CentOS7でdockerの勉強を始めたが、dockerコマンドを実行するたびにsudoするのが面倒くなったので、少し調べてみたのでメモる。
環境は CentOS 7.3.1611、docker-1.12.6-11
何もしないと、dockerをインストールした状態でdockerコマンドの実行で以下のようにエラーで弾かれる。
$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
調べると、設定によって回避が出来ることが判明。
- 作業ユーザにグループを追加
$ sudo gpasswd -a USER dockerroot
ユーザ USER をグループ dockerroot に追加
- サービスとの通信ファイルのパーミションを変更
$ ls -ld /var/run/docker*
drwx------. 4 root root 80 4月 6 13:34 /var/run/docker
-rw-r--r--. 1 root root 4 4月 6 13:34 /var/run/docker.pid
srw-rw----. 1 root root 0 4月 6 13:34 /var/run/docker.sock
$ sudo chgrp dockerroot /var/run/docker.sock
$ ls -ld /var/run/docker*
drwx------. 4 root root 80 4月 6 13:34 /var/run/docker
-rw-r--r--. 1 root root 4 4月 6 13:34 /var/run/docker.pid
srw-rw----. 1 root dockerroot 0 4月 6 13:34 /var/run/docker.sock
$ exec su - USER
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ただ、/var/run/docker.sock は起動のたびに作成されるファイル(ソケット)だからどこかでグループを定義してやる必要がある。
ここ に書いてあった。
/etc/sysconfig/docker で、ファイル(ソケット)のグループオーナを指定する。
/etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs
# OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -G dockerroot'
システムを再起動。グループは正しく設定されていることを確認
$ ll -d /var/run/docker*
drwx------. 4 root root 80 4月 6 14:10 /var/run/docker
-rw-r--r--. 1 root root 4 4月 6 14:10 /var/run/docker.pid
srw-rw----. 1 root dockerroot 0 4月 6 14:10 /var/run/docker.sock