注意
私はdocker2日程度の初心者です.ご注意ください. (追記2019/1/26:すでにコメントでいくつか指摘を頂きました. そちらもご覧ください)
また,訂正ありましたら,コメント,編集リクエスト,なんでもください.世に間違ったHowToをはびこらせたくないです.
訂正をコメントで頂くことができました。先にコメントを合わせて読まれることをオススメ致します
話の経緯
dockerを扱うとき,rootになるかdockerグループに所属させるのが通常ですが(ここにあるように色々あるみたいですが)そんなんめんどくさい.いままで使ってきたグループ設定をそのまま使って,例えば,hogeグループの人をあたかもdockerグループのように扱えないか探していました.
ググるとdockerの実行グループを変更するという記事を発見できましたが,これができない.daemon.jsonもdockerd -Gも何故かうまく行かない.
方法
僕の環境は
Ubuntu16.04
Docker version 18.09.1, build 4c52b90
です.
結論から述べるとdocker.socketを編集してください.
docker.socketのディレクトリはdocker.serviceと同じところにあるはずです.こちらを参考にしてください.
以下dockerグループの代わりにhogeグループを使う手順です.
sudo vim <docker.socketの場所>
# うちのは/lib/systemd/system/docker.socketでした
以下のように書き換える
-SocketGroup=docker
+SocketGroup=<hogeのgid>
最後に再起動
sudo systemctl daemon-reload
sudo systemctl restart docker
解説
どうしてこれでできるのか.
そもそもdockerの操作はこの図にもあるように通常ホストOSからのアクセスであれば,Unixソケットを介して行われます.
dockerにアクセスする権限がないときに怒られるのは,このUnixソケットへのアクセス権がないからみたいです.
実際,/var/run/docker.socketを見てみてください.デフォルトではグループがdockerになっていると思います.だから,dockerグループでアクセスできたんですね.
本来このグループの設定はdaemon.jsonやdockerd -Gで変えられるはずですが(dokcer docs参考),ぼくの環境ではこれがどうしてかダメでした.
そこで,最終手段としてのdocker.socketの編集を試みたわけです.やってることは結局,みんな同じことを指してます.
感想
どうにも編集してるファイルが弄っちゃいけなさそうなファイルで怖い.でも,他がダメだったししょうがないと思っている.
