2022-10-17 Mon: Manjaro に Rootless Docker のインストール
必要なパッケージのインストール
code:sh
yay -S docker docker-compose docker-rootless-extras fuse-overlayfs
fuse-overlayfs は ドキュメント に必要と書いてあったので、入れた。ファイルシステムの仮想化を手伝ってくれるのかな?(なにも理解していない DOCKER_HOST の設定
好きな SHELL に設定を行う。私の場合は fish に下記を設定した。
code:~/.config/fish/config.fish
set -x DOCKER_HOST unix://$XDG_RUNTIME_DIR/docker.sock
多分 bash ならこんな感じ。
code:~/.bashrc
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
サブグループの作成をする
docker-rootless-extras をインストールすると、サブグループの設定を促される。
id も表示されているので、その値をメモしておく。
Archwiki にも記載されているが、値をそのまま利用してよいのかはわからない。 code:sh
sudo echo "yourname:165536:65536" >> /etc/subuid
sudo echo "yourname:165536:65536" >> /etc/subgid
Docker を動かしてみる
systemctl から呼び出すようにしたいので、下記を実行する
code:sh
systemctl --user start docker
systemctl --user status docker
で、fail している。。
code:systemctl
× docker.service - Docker Application Container Engine (Rootless)
Loaded: loaded (/usr/lib/systemd/user/docker.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Mon 2022-10-17 17:01:43 JST; 57s ago
Duration: 3ms
TriggeredBy: × docker.socket
Process: 1667 ExecStart=/usr/bin/dockerd-rootless.sh (code=exited, status=1/FAILURE)
Main PID: 1667 (code=exited, status=1/FAILURE)
CPU: 3ms
Oct 17 17:01:40 hokupod-x13 systemd1303: docker.service: Main process exited, code=exited, status=1/FAILURE Oct 17 17:01:40 hokupod-x13 systemd1303: docker.service: Failed with result 'exit-code'. Oct 17 17:01:43 hokupod-x13 systemd1303: docker.service: Scheduled restart job, restart counter is at 3. Oct 17 17:01:43 hokupod-x13 systemd1303: Stopped Docker Application Container Engine (Rootless). Oct 17 17:01:43 hokupod-x13 systemd1303: docker.service: Start request repeated too quickly. Oct 17 17:01:43 hokupod-x13 systemd1303: docker.service: Failed with result 'exit-code'. Oct 17 17:01:43 hokupod-x13 systemd1303: Failed to start Docker Application Container Engine (Rootless). 原因を探るために利用されている script を確認する
私の場合は、/usr/bin/dockerd-rootless.sh が利用されていた。
とりあえず手で叩いてみる
code:sh
bash /usr/bin/dockerd-rootless.sh
たしかにエラーになっている
code:sh
+ case "$1" in
+ '-w /run/user/1000 ''
+ '-d /home/hokupod ''
+ rootlesskit=
+ for f in docker-rootlesskit rootlesskit
+ command -v docker-rootlesskit
+ for f in docker-rootlesskit rootlesskit
+ command -v rootlesskit
+ rootlesskit=rootlesskit
+ break
+ '-z rootlesskit ''
+ : ''
+ : ''
+ : builtin
+ : auto
+ : auto
+ net=
+ mtu=
+ '-z '' ''
+ command -v slirp4netns
+ '-z '' ''
+ command -v vpnkit
+ echo 'Either slirp4netns (>= v0.4.0) or vpnkit needs to be installed'
Either slirp4netns (>= v0.4.0) or vpnkit needs to be installed
+ exit 1
依存が足りていない模様。。
なので、書かれている通りslirp4netnsを入れて再実行
code:sh
yay -S slirp4netns
systemctl --user start docker
systemctl --user status docker
よしいい感じ。
code:sh
● docker.service - Docker Application Container Engine (Rootless)
Loaded: loaded (/usr/lib/systemd/user/docker.service; enabled; preset: enabled)
Active: active (running) since Mon 2022-10-17 17:09:17 JST; 3s ago
TriggeredBy: × docker.socket
Main PID: 3966 (rootlesskit)
Tasks: 54
Memory: 176.0M
CPU: 320ms
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/docker.service
├─3966 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns->
├─3979 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4net>
├─4001 slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-secc>
├─4008 dockerd
└─4036 containerd --config /run/user/1000/docker/containerd/containerd.toml --log-level in>
少し使ってみているが、今のところ問題は起きていない。
動作が確認できたので、自動起動を有効にする。
code:sh
systemctl --user enable docker