Bash script to update your rootless docker installation.
👤 Author: Axel Hahn
🧾 Source: https://github.com/axelhahn/bash-rootless-docker-updater
📜 License: GNU GPL 3.0
Get the updater script with git clone or download of the achive. The location of the script can be anywhere.
Just run the script ./update-rootless-docker.sh
What happens:
- It downloads an eol check script (on the 1st run) - see https://git-repo.iml.unibe.ch/iml-open-source/eol-check/
- If version check detects an up to date version then it stops with a friendly message
- If a minor version update is available, it will stop rootless docker service and install the current version
./update-rootless-docker.sh
=====| AXELS SMART UPDATER FOR ROOTLESS DOCKER v0.1 |=====
INFO: Downloading eol_check.sh...
⚠️ Docker Engine v20.10.14: Update with new major version is available: '28.4.0'.
❌ This version is not maintained anymore.
❌ Support end detected.
End of life date: 2023-12-10 (641 days ago)
INFO: Updating rootless docker ...
> Stopping docker service ...
> Removing file ~/bin/dockerd ...
INFO: Installing rootless docker...
# Installing stable version 28.4.0
# Executing docker rootless install script, commit: 5c8855edd778525564500337f5ac4ad65a0c168e
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 78.2M 100 78.2M 0 0 104M 0 --:--:-- --:--:-- --:--:-- 104M
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16.6M 100 16.6M 0 0 91.7M 0 --:--:-- --:--:-- --:--:-- 91.9M
+ PATH=/home/axel/bin:/home/axel/.local/bin:/home/axel/.config/composer/vendor/bin:/home/axel/bin:/home/axel/.local/bin:/home/axel/.config/composer/vendor/bin:/home/axel/bin:/home/axel/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/opt/rocm/bin
+ /home/axel/bin/dockerd-rootless-setuptool.sh install
[WARNING] File already exists, skipping: /home/axel/.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/axel/.config/systemd/user/docker.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-09-11 08:51:55 CEST; 3s ago
Invocation: 25a81ab3aa524dd5a2c89a7a90f55a5a
Docs: https://docs.docker.com/go/rootless/
Main PID: 8755 (rootlesskit)
Tasks: 68
Memory: 227.4M (peak: 227.4M)
CPU: 1.351s
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/docker.service
├─8755 rootlesskit --state-dir=/run/user/1000/dockerd-rootless --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /home/axel/bin/dockerd-rootless.sh
├─8763 /proc/self/exe --state-dir=/run/user/1000/dockerd-rootless --net=vpnkit --mtu=1500 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disable-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /home/axel/bin/dockerd-rootless.sh
├─8780 vpnkit --ethernet /run/user/1000/dockerd-rootless/vpnkit-ethernet.sock --mtu 1500 --host-ip 0.0.0.0
├─8795 dockerd
└─8823 containerd --config /run/user/1000/docker/containerd/containerd.toml
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670334417+02:00" level=warning msg="WARNING: No io.weight (per device) support"
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670342933+02:00" level=warning msg="WARNING: No io.max (rbps) support"
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670351620+02:00" level=warning msg="WARNING: No io.max (wbps) support"
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670359555+02:00" level=warning msg="WARNING: No io.max (riops) support"
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670368862+02:00" level=warning msg="WARNING: No io.max (wiops) support"
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670409149+02:00" level=info msg="Docker daemon" commit=249d679 containerd-snapshotter=false storage-driver=overlay2 version=28.4.0
Sep 11 08:51:56 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:56.670493228+02:00" level=info msg="Initializing buildkit"
Sep 11 08:51:57 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:57.370797054+02:00" level=info msg="Completed buildkit initialization"
Sep 11 08:51:57 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:57.372917008+02:00" level=info msg="Daemon has completed initialization"
Sep 11 08:51:57 axels-laptop dockerd-rootless.sh[8795]: time="2025-09-11T08:51:57.372953748+02:00" level=info msg="API listen on /run/user/1000/docker.sock"
+ DOCKER_HOST=unix:///run/user/1000/docker.sock
+ /home/axel/bin/docker version
Client:
Version: 28.4.0
API version: 1.51
Go version: go1.24.7
Git commit: d8eb465
Built: Wed Sep 3 20:56:28 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.4.0
API version: 1.51 (minimum version 1.24)
Go version: go1.24.7
Git commit: 249d679
Built: Wed Sep 3 20:58:50 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.7.28
GitCommit: b98a3aace656320842a23f4a392a33f46af97866
runc:
Version: 1.3.0
GitCommit: v1.3.0-0-g4ca628d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
rootlesskit:
Version: 2.3.4
ApiVersion: 1.1.1
NetworkDriver: vpnkit
PortDriver: builtin
StateDir: /run/user/1000/dockerd-rootless
vpnkit:
Version:
+ systemctl --user enable 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 axel`
[INFO] CLI context "rootless" already exists
[INFO] Using CLI context "rootless"
Current context is now "rootless"
Warning: DOCKER_HOST environment variable overrides the active context. To use "rootless", either set the global --context flag, or unset DOCKER_HOST environment variable.
[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc):
export PATH=/home/axel/bin:$PATH
[INFO] Some applications may require the following environment variable too:
export DOCKER_HOST=unix:///run/user/1000/docker.sock
If you start the script again it shows an up to date message and stops with exitcode 0.
./update-rootless-docker.sh
=====| AXELS SMART UPDATER FOR ROOTLESS DOCKER v0.1 |=====
INFO: Downloading eol_check.sh...
✅ Docker Engine v28.4.0: You are up to date.
OK, your version is maintained.
Nothing to do :-)
If no rootless docker is installed, the script will ask you if you want to install it.