Debian 9 stretch に rootless docker をインストールする
root 権限外で docker コンテナを動かしたくなったので rootless docker を利用してみることにした。rootless docker のインストールガイドは下記のリンクで読むことができる。
DEBIAN GNU/LINUX
といったセクションもあって rootless docker をインストールするために書かれてる事を実行する。
私の場合は、docker-ce をインストール済みだったので apt コマンドで削除し、ユーザー権限も sudo usermod -aG docker codehex
みたいな感じで設定済みだったため、stack exchange を参考にしながら sudo gpasswd -d codehex docker
といった感じで削除した。
あとはサイトの Install
にも書かれてる次のワンライナーを実行するだけでインストールできる。
$ curl -fsSL https://get.docker.com/rootless | sh
しかし、インストール後に肝心の systemctl --user start docker
を下記のメッセージが表示されるだけで実行できなかった。
$ systemctl --user start docker Failed to connect to bus: No such file or directory
これを解決するために https://get.docker.com/rootless の shell script を読んだ。
気になったポイントがこの辺である。(2020–04-18 時点)
export XDG_RUNTIME_DIR="/tmp/docker-$(id -u)" mkdir -p "$XDG_RUNTIME_DIR"
振り返ってみると実行後にこんな感じのメッセージが表示された。
# Make sure the following environment variables are set (or add them to ~/.bashrc): export XDG_RUNTIME_DIR=/tmp/docker-1000 export DOCKER_HOST=unix:///tmp/docker-1000/docker.sock
正しく XDG_RUNTIME_DIR
を設定してないのだろうと予想した。
debian 9 の XDG_RUNTIME_DIR
がどんな設定になってるか調べたところ、特に設定してない場合は /run/user/1000
がデフォルトになるとのこと。
なので .zshrc (私は zsh を使ってるので)に下記を追記した。
export XDG_RUNTIME_DIR=/run/user/$(id -u) export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
このあと、shell をリロードしてインストールスクリプトを再実行、systemctl --user start docker
を実行すると上手く docker daemon がついに動いた。
使ってる VM の再起動時に自動で立ち上がって欲しかったので systemctl --user enable docker
も実行して私の rootless docker のインストールが終わった。