2016/10/18 21:11:54

Dockerグループにユーザを登録してsudoなしでdockerコマンドを使えるようにする

dokcer
目次(クリックするとジャンプします)
  • 1:sudoまんどくせ
  • 2:sudoなしでdockerコマンドを打てるようにする
  • 2.1:dokcerグループを確認
  • 2.2:dokcerグループに加える
  • 3:補足・ハマりポイント
  • 3.1:グループ情報を上書きしないように注意
  • 3.2:sudo権限の与え方
  • 3.2.1:ユーザに直接sudo権限を与える(debianでの例)
  • 3.3:dockerグループに加えた後
  • 4:まとめ

sudoまんどくせ

初期状態のDokcerはコマンドを使うのにsudoが必要となります。隣の席の須藤くんのことではありません。

毎回sudoを付けてコマンドを入力するのも面倒なので、公式ドキュメントでも紹介されている通り、作業ユーザをdockerグループに加わえることでsudoを省くことができるようにしたいと思います。

公式ドキュメント(英語)

以下その方法を紹介したいと思います。

sudoなしでdockerコマンドを打てるようにする

dokcerグループを確認

dockerがインストールされた時点でdockerグループが作られているはずなので、別途dockerグループを作る必要は無いと思います。もしできていないなら作ります。

dockerグループの存在を確かめる

$ cat /etc/group | grep docker

dockerグループがない場合にdockerグループを作る(rootにて実行)

# groupadd docker

dokcerグループに加える

大事なのが、どのユーザでも良いわけではなく、sudo権限をもっているユーザが対象になる点です。sudo権限を持っていないユーザを加えてもsudoなしでdockerコマンド使えるわけではないデス(あたりまえか)。

またsudo権限の与え方次第でうまく動いてくれない場合があるようなのです(後述)。

以下はsudo権限を持つユーザ「hoge」をdockerグループに加えるコマンドです。hogeとしてログインし以下のコマンドを実行することでhogeがdokcerグループに加わります。

$ sudo usermod -aG docker hoge

公式ドキュメントには書いてないようですが、dockerグループにユーザを加えた後は一回dockerを再起動させたほうが良いかもしれません。

補足・ハマりポイント

グループ情報を上書きしないように注意

気を付けて欲しいのがusermodの-aオプション。

これがないとグループの情報が上書きされてしまい、今まで加わっていたグループの情報が消えてしまいます。なので必ず-aオプションは忘れずに。

やっちまったぜ。

sudo権限の与え方

※追記(2015/2/20)以下の内容は@MINOの勘違いの可能性が高いです。どうもDockerかマシンの再起動の罠にはまった可能性があります。焦らずマシン再起動がもっとも安心かと思います。おそらくグループにてsudo権限を与える方法でも大丈夫なはずですが、一応内容を残しておきます。

これは各位の環境によるかと思いますが、sudo権限の与え方は大まかに2つあります。 一つはsudoグループ(CentOSやMacならwheelグループ等)にユーザを加えて権限を与える方法。 もう一つはユーザ自体に権限を付与する方法です。

@MINOは環境がdebianでsudoグループが存在しますので、作業ユーザをsudoグループに加えることで権限を与えておりますシタ。

しかしdockerでsudoを省くにはsudo権限グループに加える方法ではダメなようです。

どうも直接作業ユーザにsudo権限を与える必要があるようで。何回かためしたのですが、sudoグループに加えているだけの場合は以下のような文が出力されました。。

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

「繋がらねえよ、動いてんの?」だって…。

もしdockerグループに加えてもうまくsudoを省くことが成功しない場合は、作業ユーザに直接sudo権限を与えてみたほうが良いのかも。

ユーザに直接sudo権限を与える(debianでの例)

権限設定をするコマンド(rootにて実行)

# visudo

設定用のtempファイルが開くので、sudo権限をもつユーザとして追加

/etc/sudoers.tmp

# User privilege specification 
root ALL=(ALL:ALL) ALL
hoge ALL=(ALL:ALL) ALL //←ここ

visudoコマンドは/etc/sudoersを安全に編集するためのコマンドです。/etc/sudoersを直接編集するのはどうやらとても危ないことのようです。

直接/etc/sudoersを編集した場合、書き損じでも無慈悲に反映されてしまいます。最悪sudo権限がくずれてしまいなんの作業もできなくなることになりかねません。怖いデス。なのでvisudoを使うようにしましょう。

dockerグループに加えた後

@MINOが上記でsudo権限をいろいろ試している時、ユーザが直接sudo権限を持っているのにsudoなしでdockerが動いてくれないことがありました。

もしかしたらマシン再起動が手っ取り早いかも。

まとめ

こんな簡単なことでもハマりまくる。泣きそう。

でもsudoをいちいち打たなくてよくなった。ウレシス。