zaki work log

作業ログやら生活ログやらなんやら

Rootless modeのDockerをUbuntu 20.04へインストール (Debian 10では依存パッケージ不足で失敗)

DockerのRootless modeのセットアップを試してみた。
設定すればデフォルトではroot権限が必要なDockerを一般ユーザーでも使えるモードで動作させることができる。

現在はDockerをパッケージインストールすると、Rootless mode用のセットアップスクリプトも依存でインストールされるようになっている。

docs.docker.com

ちなみにPodmanはデフォルトでRootlessで動作する。

前提

Ubuntu 20.04であれば特に無いが、Debian Busterだと必要なパッケージが公式リポジトリに無いためインストールに失敗する。(後述)

今回の環境は以下の通り。

zaki@ubuntu-node:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

準備

Prerequisitesの通り、uidmapをインストールする。

zaki@ubuntu-node:~$ apt search uidmap
Sorting... Done
Full Text Search... Done
uidmap/focal-updates 1:4.8.1-1ubuntu5.20.04 amd64
  programs to help use subuids

入ってないので入れる。

$ sudo apt install uidmap
zaki@ubuntu-node:~$ id -u
1000
zaki@ubuntu-node:~$ whoami
zaki
zaki@ubuntu-node:~$ grep ^$(whoami): /etc/subuid
zaki:100000:65536
zaki@ubuntu-node:~$ grep ^$(whoami): /etc/subgid
zaki:100000:65536

ディストリビューション毎の設定

Ubuntuの場合は特に準備無し。

その他はドキュメントのDistribution-specific hintの内容を確認する。

例えばDebianの場合は以下。カーネルパラメタを設定する。

Add kernel.unprivileged_userns_clone=1 to /etc/sysctl.conf (or /etc/sysctl.d) and run sudo sysctl --system.

https://docs.docker.com/engine/security/rootless/#distribution-specific-hint

要は以下のコマンドを実行すればOK.

# echo "kernel.unprivileged_userns_clone=1" > /etc/sysctl.d/rootless-docker.conf

設定したカーネルパラメタを確認。

zaki@debian-node:~$ cat /proc/sys/kernel/unprivileged_userns_clone 
0
zaki@debian-node:~$ sudo sh -c 'echo "kernel.unprivileged_userns_clone=1" > /etc/sysctl.d/rootless-docker.conf'
zaki@debian-node:~$ cat /proc/sys/kernel/unprivileged_userns_clone 
1

インストール

通常のDocker未インストールの場合

docker-ce-rootless-extrasをインストールする。 インストールするにはDockerインストール用のリポジトリを追加する必要があるため、各ディストリビューション用のインストール手順を確認する。

docs.docker.com

Ubuntuであれば以下の通り。
(ほかのディストリビューションも、docker-ceをinstallする直前まで進めれば良い)

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update

設定すればaptでインストールできるようになる。

zaki@debian-node:~$ apt search docker-ce-rootless-extras
ソート中... 完了
全文検索... 完了  
docker-ce-rootless-extras/buster 5:20.10.5~3-0~debian-buster amd64
  Rootless support for Docker.

ただし、docker-ce-rootless-extrasをインストールすると依存でdocker-ceも入るため、以下の「通常のDockerがインストール済みの場合」のサービス停止を確認する。

zaki@ubuntu-node:~$ which docker
/usr/bin/docker

通常のDockerがインストール済みの場合

Dockerは止める。

Note

If the system-wide Docker daemon is already running, consider disabling it: $ sudo systemctl disable --now docker.service

https://docs.docker.com/engine/security/rootless/#install

zaki@ubuntu-node:~$ systemctl is-active docker
active
zaki@ubuntu-node:~$ systemctl is-enabled docker
enabled

Ubuntuだとインストールしただけでenabledになってるので。

zaki@ubuntu-node:~$ sudo systemctl disable --now docker
Synchronizing state of docker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable docker
Removed /etc/systemd/system/multi-user.target.wants/docker.service.
Warning: Stopping docker.service, but it can still be activated by:
  docker.socket
zaki@ubuntu-node:~$ systemctl is-active docker
inactive
zaki@ubuntu-node:~$ systemctl is-enabled docker
disabled

install

パッケージ版Dockerをインストールすると、Rootless modeのDockerインストールのためのスクリプト/usr/bin/dockerd-rootless-setuptool.sh にある。

zaki@ubuntu-node:~$ which dockerd-rootless-setuptool.sh
/usr/bin/dockerd-rootless-setuptool.sh

このスクリプトをRootlessで実行したい一般ユーザーでinstallを引数に指定して実行する。

zaki@ubuntu-node:~$ dockerd-rootless-setuptool.sh install
[INFO] Creating /home/zaki/.config/systemd/user/docker.service
[INFO] starting systemd service docker.service
+ systemctl --user start docker.service
+ sleep 3
+ systemctl --user --no-pager --full status docker.service
● docker.service - Docker Application Container Engine (Rootless)
     Loaded: loaded (/home/zaki/.config/systemd/user/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-03-05 00:12:24 UTC; 3s ago
       Docs: https://docs.docker.com/engine/security/rootless/
   Main PID: 75116 (rootlesskit)
     CGroup: /user.slice/user-1000.slice/user@1000.service/docker.service
             ├─75116 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /usr/bin/dockerd-rootless.sh
             ├─75129 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /usr/bin/dockerd-rootless.sh
             ├─75146 slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 75129 tap0
             ├─75153 dockerd
             └─75166 containerd --config /run/user/1000/docker/containerd/containerd.toml --log-level info

Mar 05 00:12:24 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:24.859622362Z" level=warning msg="Your kernel does not support CPU realtime scheduler"
Mar 05 00:12:24 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:24.859699390Z" level=warning msg="Your kernel does not support cgroup blkio weight"
Mar 05 00:12:24 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:24.859760290Z" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Mar 05 00:12:24 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:24.859931829Z" level=info msg="Loading containers: start."
Mar 05 00:12:25 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:25.105917170Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address"
Mar 05 00:12:25 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:25.315884736Z" level=info msg="Loading containers: done."
Mar 05 00:12:25 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:25.324807056Z" level=warning msg="Not using native diff for overlay2, this may cause degraded performance for building images: failed to set opaque flag on middle layer: operation not permitted" storage-driver=overlay2
Mar 05 00:12:25 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:25.325060434Z" level=info msg="Docker daemon" commit=363e9a8 graphdriver(s)=overlay2 version=20.10.5
Mar 05 00:12:25 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:25.325172424Z" level=info msg="Daemon has completed initialization"
Mar 05 00:12:25 ubuntu-node dockerd-rootless.sh[75153]: time="2021-03-05T00:12:25.337548054Z" level=info msg="API listen on /run/user/1000/docker.sock"
+ DOCKER_HOST=unix:///run/user/1000/docker.sock /usr/bin/docker version
Client: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:18:20 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:16:15 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
+ systemctl --user enable docker.service
Created symlink /home/zaki/.config/systemd/user/default.target.wants/docker.service → /home/zaki/.config/systemd/user/docker.service.
[INFO] Installed docker.service successfully.
[INFO] To control docker.service, run: `systemctl --user (start|stop|restart) docker.service`
[INFO] To run docker.service on system startup, run: `sudo loginctl enable-linger zaki`

[INFO] Make sure the following environment variables are set (or add them to ~/.bashrc):

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

timeつけ忘れたけど10秒もかからなかった。
実行ログの最後に、環境変数設定のメッセージが出ているので、これを設定する。
(/usr/binは設定済みなので省略)

zaki@ubuntu-node:~$ export DOCKER_HOST=unix:///run/user/1000/docker.sock

なお、この環境変数は設定するパスを見ても分かる通り、使用するユーザーID毎に異なるため、別のユーザーでも使用する場合は都度dockerd-rootless-setuptool.shを設定する。

zaki@ubuntu-node:~$ docker version
Client: Docker Engine - Community
 Version:           20.10.5
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        55c4c88
 Built:             Tue Mar  2 20:18:20 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.5
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       363e9a8
  Built:            Tue Mar  2 20:16:15 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.3
  GitCommit:        269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc:
  Version:          1.0.0-rc92
  GitCommit:        ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

永続的に設定するには、この環境変数~/.bashrcに追記しておく。

コンテナをデプロイ

rootでなく通常ユーザーで、とりあえずwebサーバーをローカルで8080/TCPでlistenする設定で実行。

zaki@ubuntu-node:~$ docker run -d -p 8080:80 --rm --name httpd httpd
Unable to find image 'httpd:latest' locally
latest: Pulling from library/httpd
45b42c59be33: Pull complete 
83ac8490fcc3: Pull complete 
bdb2d204d86d: Pull complete 
243acf75a504: Pull complete 
8fc1ad93a9b1: Pull complete 
Digest: sha256:3c252c919ef2445a6a41dde913a56202754821af87c049c4312bf81bdbc6df4b
Status: Downloaded newer image for httpd:latest
0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379

webアクセス確認。

zaki@ubuntu-node:~$ curl localhost:8080
<html><body><h1>It works!</h1></body></html>

listenしてるポートとプロセスを確認すると、(通常のDockerであればdocker-proxyのところが)rootlesskitがlistenしていることを確認できる。

State   Recv-Q  Send-Q   Local Address:Port    Peer Address:Port  Process                                     
LISTEN  0       4096     127.0.0.53%lo:53           0.0.0.0:*      users:(("systemd-resolve",pid=688,fd=13))  
LISTEN  0       128            0.0.0.0:22           0.0.0.0:*      users:(("sshd",pid=751,fd=3))              
LISTEN  0       4096                 *:8080               *:*      users:(("rootlesskit",pid=983,fd=9))       
LISTEN  0       128               [::]:22              [::]:*      users:(("sshd",pid=751,fd=4))    

プロセス確認すると、rootでなく実行ユーザー権限で動作していることが確認できる。

zaki@ubuntu-node:~$ ps aux | grep docker
zaki         983  0.0  0.3 633996 13360 ?        Ssl  23:23   0:00 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /usr/bin/dockerd-rootless.sh
zaki        1011  0.0  0.3 779716 12660 ?        Sl   23:23   0:00 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /usr/bin/dockerd-rootless.sh
zaki        1034  0.0  2.2 1020492 89740 ?       Sl   23:23   0:00 dockerd
zaki        1151  0.0  1.1 898976 47252 ?        Ssl  23:23   0:00 containerd --config /run/user/1000/docker/containerd/containerd.toml --log-level info
zaki        1582  0.0  0.1 553704  7616 ?        Sl   23:32   0:00 /usr/bin/rootlesskit-docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 80
zaki        1588  0.0  0.1 696508  4452 ?        Sl   23:32   0:00 docker-proxy -container-ip 172.17.0.2 -container-port 80 -host-ip 127.0.0.1 -host-port 8080 -proto tcp
zaki        1607  0.0  0.1 111908  7752 ?        Sl   23:32   0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379 -address /run/user/1000/docker/containerd/containerd.sock
zaki        1769  0.0  0.0   6432   672 pts/0    S+   23:32   0:00 grep --color=auto docker

コンテナの実行状態を確認すると、通常ユーザーでは一覧は見えて、rootユーザーだと何も見えないことを確認できる。

zaki@ubuntu-node:~$ docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED              STATUS          PORTS                  NAMES
0bd290f5a999   httpd     "httpd-foreground"   About a minute ago   Up 59 seconds   0.0.0.0:8080->80/tcp   httpd
zaki@ubuntu-node:~$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

inspectを使うと以下の通りユーザーのホームディレクトリ以下が設定されていることがわかる。

zaki@ubuntu-node:~$ docker inspect 0bd2
[
    {
        "Id": "0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379",

        ...

        "Image": "sha256:464fdc577ef4d4ba06050b76a95ffee72d280f7aaa4291f7f4827fca7a00ed0f",
        "ResolvConfPath": "/home/zaki/.local/share/docker/containers/0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379/resolv.conf",
        "HostnamePath": "/home/zaki/.local/share/docker/containers/0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379/hostname",
        "HostsPath": "/home/zaki/.local/share/docker/containers/0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379/hosts",
        "LogPath": "/home/zaki/.local/share/docker/containers/0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379/0bd290f5a999bf82a3b71cac0d7faf1c9b15ee88567eaa11240ebe870299f379-json.log",
        "Name": "/httpd",

    ...

なお、一般ユーザー権限で動作するので、1024未満のポートは使用できない。(従来からのOSの制限)

zaki@ubuntu-node:~$ docker run -d -p 80:80 --rm httpd
557e475710bab1688172ffc7ed26bf94439551bcb28d2fe564fc5ac6f8e29f6d
docker: Error response from daemon: driver failed programming external connectivity on endpoint nostalgic_shamir (4ce60fe6e15f3f5f3af4b85e2eb06d0928a9acb2153f48e7903ba6932ba4d699): Error starting userland proxy: error while calling PortManager.AddPort(): cannot expose privileged port 80, you can add 'net.ipv4.ip_unprivileged_port_start=80' to /etc/sysctl.conf (currently 1024), or set CAP_NET_BIND_SERVICE on rootlesskit binary, or choose a larger port number (>= 1024): listen tcp 0.0.0.0:80: bind: permission denied.

メッセージの通りカーネルパラメタを設定して許可を与えることは可能。

デーモン

ユーザーごとの以下のパスにファイルが作成されている。

zaki@ubuntu-node:~$ cat ~/.config/systemd/user/docker.service 
[Unit]
Description=Docker Application Container Engine (Rootless)
Documentation=https://docs.docker.com/engine/security/rootless/

[Service]
Environment=PATH=/usr/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ExecStart=/usr/bin/dockerd-rootless.sh 
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
Type=simple
KillMode=mixed

[Install]
WantedBy=default.target

systemctl--userオプションを付けて確認可能

zaki@ubuntu-node:~$ systemctl --user status docker
● docker.service - Docker Application Container Engine (Rootless)
     Loaded: loaded (/home/zaki/.config/systemd/user/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-03-05 00:12:24 UTC; 40min ago
       Docs: https://docs.docker.com/engine/security/rootless/
   Main PID: 75116 (rootlesskit)
     CGroup: /user.slice/user-1000.slice/user@1000.service/docker.service
             ├─75116 rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/r>
             ├─75129 /proc/self/exe --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up>
             ├─75146 slirp4netns --mtu 65520 -r 3 --disable-host-loopback --enable-sandbox --enable-seccomp 75129 tap0
             ├─75153 dockerd
    :
    :
zaki@ubuntu-node:~$ systemctl --user is-active docker
active
zaki@ubuntu-node:~$ systemctl --user is-enabled docker
enabled

この通り、OSをリブートしても有効。


Debian 10 (Buster)だと起動エラー

zaki@debian-node:~$ dockerd-rootless-setuptool.sh install
[INFO] Creating /home/zaki/.config/systemd/user/docker.service
[INFO] starting systemd service docker.service
+ systemctl --user start docker.service
+ sleep 3
+ systemctl --user --no-pager --full status docker.service
● docker.service - Docker Application Container Engine (Rootless)
   Loaded: loaded (/home/zaki/.config/systemd/user/docker.service; disabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Sun 2021-03-07 23:51:41 JST; 973ms ago
     Docs: https://docs.docker.com/engine/security/rootless/
  Process: 6490 ExecStart=/usr/bin/dockerd-rootless.sh (code=exited, status=1/FAILURE)
 Main PID: 6490 (code=exited, status=1/FAILURE)
+ set +x
[ERROR] Failed to start docker.service. Run `journalctl -n 20 --no-pager --user --unit docker.service` to show the error log.
[ERROR] Before retrying installation, you might need to uninstall the current setup: `/usr/bin/dockerd-rootless-setuptool.sh uninstall -f ; /usr/bin/rootlesskit rm -rf /home/zaki/.local/share/docker`
No journal files were opened due to insufficient permissions.
zaki@debian-node:~$

謎エラーがでた。

journalctl -n 20 --no-pager --user --unit docker.serviceを実行してもエラーが何も記録されていない。

zaki@debian-node:~$ journalctl -n 20 --no-pager --user --unit docker.service
Hint: You are currently not seeing messages from the system.
      Users in the 'systemd-journal' group can see all messages. Pass -q to
      turn off this notice.
No journal files were opened due to insufficient permissions.
zaki@debian-node:~$

情報が何も無さすぎるので、とりあえずログの方を何とかしようと検索してみると、以下の情報がヒット。

stackoverflow.com

/etc/systemd/journald.confで以下の変更を行ってsystemd-journaldをリスタート。

@@ -13,6 +13,7 @@
 
 [Journal]
 #Storage=auto
+Storage=persistent
 #Compress=yes
 #Seal=yes
 #SplitMode=uid

これで再度dockerd-rootless-setuptool.sh installすると、以下のようにエラーが記録された。

zaki@debian-node:~$ journalctl -n 20 --no-pager --user --unit docker.service
-- Logs begin at Mon 2021-03-08 00:42:16 JST, end at Mon 2021-03-08 00:42:27 JST. --
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + : builtin
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + : auto
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + : auto
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + net=
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + mtu=
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + [ -z ]
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + which slirp4netns
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + [ -z ]
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + which vpnkit
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + echo Either slirp4netns (>= v0.4.0) or vpnkit needs to be installed
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: Either slirp4netns (>= v0.4.0) or vpnkit needs to be installed
 3月 08 00:42:25 debian-node dockerd-rootless.sh[1061]: + exit 1
 3月 08 00:42:25 debian-node systemd[549]: docker.service: Main process exited, code=exited, status=1/FAILURE
 3月 08 00:42:25 debian-node systemd[549]: docker.service: Failed with result 'exit-code'.
 3月 08 00:42:27 debian-node systemd[549]: docker.service: Service RestartSec=2s expired, scheduling restart.
 3月 08 00:42:27 debian-node systemd[549]: docker.service: Scheduled restart job, restart counter is at 3.
 3月 08 00:42:27 debian-node systemd[549]: Stopped Docker Application Container Engine (Rootless).
 3月 08 00:42:27 debian-node systemd[549]: docker.service: Start request repeated too quickly.
 3月 08 00:42:27 debian-node systemd[549]: docker.service: Failed with result 'exit-code'.
 3月 08 00:42:27 debian-node systemd[549]: Failed to start Docker Application Container Engine (Rootless).

slirp4netnsがインストールされてないのでインストールする。

packages.debian.org

と思ったのだけど、現在のstableであるDebian Busterだとslirp4netnsのバージョンは0.2.3のため、要件が合わない。(ログを見る限り0.4.0以上が必要)
なので、替わりにvpnkitを用意すれば良さそう。
ただしパッケージはなさそうなので自前で用意する必要があるかも。(未確認)

github.com

なお、sidや時期stableバージョンのBullseyeであれば1.0.1なので使用可能と思われる。(未確認確認 )

packages.debian.org

Debian11で確認は以下

zaki-hmkc.hatenablog.com

このパッケージはCentOS 7であればバージョン0.4.3をインストール可能なので、CentOS であれば通常のパッケージインストールで使用可能だと思われる。(未確認)

[zaki@cloud-dev ~]$ yum info slirp4netns
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * epel: ftp.jaist.ac.jp
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
インストール済みパッケージ
名前                : slirp4netns
アーキテクチャー    : x86_64
バージョン          : 0.4.3
リリース            : 4.el7_8
容量                : 169 k
リポジトリー        : installed
提供元リポジトリー  : extras
要約                : slirp for network namespaces
URL                 : https://github.com/rootless-containers/slirp4netns
ライセンス          : GPLv2
説明                : slirp for network namespaces, without copying buffers across the namespaces.

情報源