Warning
Most of the code is generated by human, maybe even neko.
If you found any issues, rewrite it with Claude.
* Your warranty is void.
* I am not responsible for anything that may happen to your device by using this program.
* You do it at your own risk and take the responsibility upon yourself.
* This project is open source, you can make your own fork/rewrite but not to blame the author.
* Docker is a registered trademark of Docker, Inc. This program has no relationship with it.
* This program has no Super Cow Powers.
This project does not follow OCI standard and can only be a PARTIAL replacement of docker, this project is still under development.
For Android users, You might need to root your phone before using rurima, some container might not work properly with proot.
So, what is rurima?
The enhanced version of ruri.
ruri only focus on running container, but rurima can also provide the function of getting rootfs image and backup/restore.
And it will be a more powerful container manager in the fulture.
With the docker and lxc subcommand of rurima, you can search & get & unpack images from dockerhub or LXC mirror easily.
- Get rootfs images from dockerhub or LXC mirror.
- Automatic parse docker image config and convert to ruri cmdline.
- Unpack rootfs images with or without root privileges.
- Backup/Restore rootfs with tar.
- Built-in container runtime by ruri.
- Static binary for multiple architectures.
- Built-in OTA(upgrade) feature.
In a word, rurima is a lightweight container implementation, it tries to get the most features of docker with the least dependencies, even when your kernel does not support cgroups or namespaces.
Click to expand
~ $ sudo rurima pull openlistteam/openlist ./openlist
Pulling 20158f18ba671f0b as layer-0
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-0
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling ec81343d31bcd4b6 as layer-1
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-1
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling 889dce16043c6e0b as layer-2
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-2
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling 26e754cd7c62b57e as layer-3
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-3
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling 4f4fb700ef54461c as layer-4
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-4
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling bd69fdf7a20439e0 as layer-5
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-5
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling ec5dfd7cdbbd5a97 as layer-6
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-6
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling 53c5100b64211b73 as layer-7
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-7
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Pulling 4f4fb700ef54461c as layer-8
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Extracting layer-8
[///////////////////////////////////////////////////////////////////////////////] 100.00%
Config:
Workdir:
/opt/openlist/
Env:
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
UMASK = 022
RUN_ARIA2 = false
Command:
/entrypoint.sh
Entrypoint:
NULL
Run with ruri:
rurima r -w -W /opt/openlist/ -e "PATH" "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" -e "UMASK" "022" -e "RUN_ARIA2" "false" /data/data/com.termux/files/home/openlist /entrypoint.sh
~ $ sudo rurima r -w -W /opt/openlist/ -e "PATH" "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" -e "UMASK" "022" -e "RUN_ARIA2" "false" /data/data/com.termux/files/home/openlist /entrypoint.sh
INFO[2026-05-28 15:08:49] reading config file: /opt/openlist/data/config.json
INFO[2026-05-28 15:08:49] config file not exists, creating default config file
INFO[2026-05-28 15:08:49] load config from env with prefix:
INFO[2026-05-28 15:08:49] total memory: 15371MB, available: 4204MB
INFO[2026-05-28 15:08:49] min free memory: 1024MB
INFO[2026-05-28 15:08:49] max block limit: 64MB
INFO[2026-05-28 15:08:49] auto memory limit: 4MB
INFO[2026-05-28 15:08:49] init logrus...
Successfully created the admin user and the initial password is: LfHyicxp
start HTTP server @ 0.0.0.0:5244
- Sudo is required on Android phones.
- Enable
--privilegedoption for ruri (sudo rurima r --privileged [other options]) might fix some compatibility issues, but it is not recommended for security reasons.
- We have a unified
pullcommand to get images from dockerhub or LXC mirror now. - Some other OCI compatible registry like ghcr.io could work with
-f/--fallbackoption enabled now. - We will automatically force enable fallback mode for ghcr.io now.
See TERMS_OF_USE.md
For a full usage documentation,
See USAGE.md.
See FAQ.md.
We promise that rurima has backward compatibility of documented parts since v0.9.x, all unstable parts will be explicitly marked as WIP or unstable, and ruri has already been backward compatible. Users can always keep rurima ota to get the latest build.
Your use case, your suggestions, anyway, we would love to hear from you!
Discussions
And, don't forget to rurima ota to get the latest build!
We are working on some presets for using rurima to build your own projects, you can find them in the presets directory.
The first preset is for running debian vm with avf on MTK devices, and we will add more presets in the future, PRs are welcome!
You can get rurima binary (staticly linked) for arm64, armv7, armhf, riscv64, i386, loong64, s390x, ppc64le and x86_64 from the release page.
Or run the follwing command to get rurima to ./rurima and ./rurima-dbg(debug version):
. <(curl -sL https://get.ruri.zip/rurima)For termux, run:
pkg install wget curl jq coreutils file proot tar xz-utils gzip
For Debian/Ubuntu based system, run:
apt install wget curl jq coreutils file proot tar xz-utils gzip
For RedHat/CentOS/Fedora based system, run:
dnf install wget curl jq coreutils file proot tar xz gzip
For Alpine based system, run:
apk add wget curl jq coreutils file proot tar xz gzip
rurima needs tar, xz, gzip, file, you can find these static binary for aarch64, armv7, x86_64, i386 or riscv64 in:
tar-static
xz-static
gzip-static
file-static
rurima need curl for downloading images, you can find a third party build here (Thanks stunnel) stunnel/static-curl.
rurima need sha256sum for checking downloaded file from dockerhub, use --fallback option can disable this.
rurima need jq for parsing json, you can find it in jq.
rurima also need proot if you are unpacking rootfs without root privileges, you can find it by the following way:
First, you know your cpu arch, then, for example for aarch64:
curl -sL https://mirrors.tuna.tsinghua.edu.cn/alpine/edge/testing/aarch64/ | grep proot-staticYou got:
<tr><td class="link"><a href="proot-static-5.4.0-r1.apk" title="proot-static-5.4.0-r1.apk">proot-static-5.4.0-r1.apk</a></td><td class="size">118.8 KiB</td><td class="date">25 Oct 2024 19:10:30 +0000</td></tr>
So that you download:
https://mirrors.tuna.tsinghua.edu.cn/alpine/edge/testing/aarch64/proot-static-5.4.0-r1.apk
and finally, tar -xvf *.apk to unpack it. So you got proot.static, rename it to proot and put it in your $PATH.
Rurima does not allow to set any suid/sgid (with root) or capability on it, it will check it in main() and error() if detected these unsafe settings.
So, please always use sudo instead.
Please use the debug version(rurima-dbg) in release to get debug logs, and please tell me the command you run to cause the unexpected behavior you think!
Manage ruri containers and configs.
sfx pack for container images.
....
Licensed under the MIT License.
Copyright (c) 2024-2025 Moe-hacker.
「僕らタイムフライヤー
時を駆け上がるクライマー
時のかくれんぼ
はぐれっこはもういやなんだ」
