アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

Debian 9 stretch に rootless docker をインストールする

f:id:codehex:20200418163433j:plain

root 権限外で docker コンテナを動かしたくなったので rootless docker を利用してみることにした。rootless docker のインストールガイドは下記のリンクで読むことができる。

docs.docker.com

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 のインストールが終わった。