Distrobox
Current logo by daudix.
Previous logo by hexared.
Use any Linux distribution inside your terminal. Enable both backward and forward
compatibility with software and freedom to use whatever distribution you’re more
comfortable with.
Distrobox uses podman, docker or
lilipod to create containers using the
Linux distribution of your choice.
The created container will be tightly integrated with the host, allowing sharing
of the HOME directory of the user, external storage, external USB devices and
graphical apps (X11/Wayland), and audio.

- What It Does
- Why
- Quick Start
- Assemble Distrobox
- Configure Distrobox
- Installation
- Dependencies
- Uninstallation
What It Does
Simply put it’s a fancy wrapper around podman, docker, or lilipod to create and start
containers highly integrated with the hosts.
The distrobox environment is based on an OCI image. This image is used to create a container that seamlessly integrates with the rest of the operating system by providing access to the user’s home directory, the Wayland and X11 sockets, networking, removable devices (like USB sticks), systemd journal, SSH agent, D-Bus, ulimits, /dev and the udev database, etc…
It implements the same concepts introduced by https://github.com/containers/toolbox but in a simplified way using POSIX sh and aiming at broader compatibility.
All the props go to them as they had the great idea to implement this stuff.
It is divided into 12 commands:
distrobox-assemble- creates and destroy containers based on a config filedistrobox-create- creates the containerdistrobox-enter- to enter the containerdistrobox-ephemeral- create a temporal container, destroy it when exiting the shelldistrobox-list- to list containers created with distroboxdistrobox-rm- to delete a container created with distroboxdistrobox-stop- to stop a running container created with distroboxdistrobox-upgrade- to upgrade one or more running containers created with distrobox at oncedistrobox-generate-entry- to create an entry of a created container in the applications listdistrobox-init- the entrypoint of the container (not meant to be used manually)distrobox-export- it is meant to be used inside the container, useful to export apps and services from the container to the hostdistrobox-host-exec- to run commands/programs from the host, while inside of the container
It also includes a little wrapper to launch commands with distrobox COMMAND
instead of calling the single files.
Please check the usage docs here and see some handy tips on how to use it
See It in Action
Thanks to castrojo, you can see Distrobox in action in this explanatory video on his setup with Distrobox, Toolbx, Fedora Silverblue for the uBlue project (check it out!)
Why
- Provide a mutable environment on an immutable OS, like ChromeOS, Endless OS, Fedora Silverblue, OpenSUSE Aeon/Kalpa, Vanilla OS, or SteamOS3
- Provide a locally privileged environment for sudoless setups (eg. company-provided laptops, security reasons, etc…)
- To mix and match a stable base system (eg. Debian Stable, Ubuntu LTS, RedHat) with a bleeding-edge environment for development or gaming (eg. Arch, OpenSUSE Tumbleweed, or Fedora with the latest Mesa)
- Leverage a high abundance of curated distro images for
docker/podmanto manage multiple environments.
Refer to the compatibility list for an overview of the supported host distros HERE and container’s distro HERE.
Aims
This project aims to bring any distro userland to any other distro
supporting podman, docker, or lilipod.
It has been written in POSIX shell to be as portable as possible and it does not have
problems with dependencies and glibc version’s compatibility.
Refer HERE for a list of supported container managers and minimum supported versions.
It also aims to enter the container as fast as possible, every millisecond adds up if you use the container as your default environment for your terminal:
These are some sample results of distrobox-enter on the same container on my
weak laptop:
)
)
Security Implications
Isolation and sandboxing are not the main aims of the project, on the contrary
it aims to tightly integrate the container with the host.
The container will have complete access to your home, pen drive, and so on,
so do not expect it to be highly sandboxed like a plain
docker/podman container or a Flatpak.
Caution
If you use
docker, or you usepodman/lilipodwith the--root/-rflag, the containers will run as root, so root inside the rootful container can modify system stuff outside the container, Be also aware that In rootful mode, you’ll be asked to setup the user’s password, this will ensure at least that the container is not a passwordless gate to root, but if you have security concerns for this, usepodmanorlilipodthat runs in rootless mode. Rootlessdockeris still not working as intended and will be included in the future when it will be complete.
That said, it is in the works to implement some sort of decoupling with the host, as discussed here: #28 Sandboxed mode
Quick Start
Create a new distrobox:
Create a new distrobox with Systemd (acts similar to an LXC):
Enter created distrobox:
Add one with a different distribution, eg. Ubuntu 20.04:
Execute a command in a distrobox:
List running distroboxes:
Stop a running distrobox:
Remove a distrobox:
You can check HERE for more advanced usage and check a comprehensive list of useful tips HERE
Assemble Distrobox
Manifest files can be used to declare a set of distroboxes and use
distrobox-assemble to create/destroy them in batch.
Head over the usage docs of distrobox-assemble for a more detailed guide.
Configure Distrobox
Configuration files can be placed in the following paths, from the least important to the most important:
- /usr/share/distrobox/distrobox.conf
- /usr/etc/distrobox/distrobox.conf
- /etc/distrobox/distrobox.conf
- ${HOME}/.config/distrobox/distrobox.conf
- ${HOME}/.distroboxrc
You can specify inside distrobox configurations and distrobox-specific Environment variables.
Example configuration file:
"1"
0
"docker"
"registry.opensuse.org/opensuse/toolbox:latest"
"test-name-1"
"$HOME/.local/share/container-home-test"
"~/.local/distrobox/a_custom_default_init_hook.sh"
"~/a_custom_default_pre_init_hook.sh"
"--env-file /path/to/file --custom-flag"
"/example:/example1 /example2:/example3:ro"
"1"
"0"
PATH="$PATH:/path/to/custom/podman"
Alternatively, it is possible to specify preferences using ENV variables:
- DBX_CONTAINER_ALWAYS_PULL
- DBX_CONTAINER_CUSTOM_HOME
- DBX_CONTAINER_IMAGE
- DBX_CONTAINER_MANAGER
- DBX_CONTAINER_NAME
- DBX_CONTAINER_ENTRY
- DBX_NON_INTERACTIVE
- DBX_SKIP_WORKDIR
Installation
Distrobox is packaged in the following distributions, if your distribution is on this list, you can refer to your repos for installation:
Thanks to the maintainers for their work: M0Rf30, alcir, dfaggioli, AtilaSaraiva, michel-slm
Alternative Methods
Here is a list of alternative ways to install distrobox.
Curl or Wget
If you like to live your life dangerously, or you want the latest release, you can trust me and simply run this in your terminal:
|
or using wget
|
or if you want to select a custom directory to install without sudo:
|
or using wget
|
If you want to install the last development version, directly from the last commit on Git, you can use:
|
or using wget
|
or:
|
or using wget
|
Upgrading
Just run the curl or wget command again.
Warning
Remember to add prefix-path-you-choose/bin to your PATH, to make it work.
Git
Alternatively, you can clone the project using git clone or using the latest
release HERE.
Enter the directory and run ./install, by default it will attempt to install
in ~/.local but if you run the script as root, it will default to /usr/local.
You can specify a custom directory with the --prefix flag
such as ./install --prefix ~/.distrobox.
Prefix explained: main distrobox files get installed to ${prefix}/bin whereas
the manpages get installed to ${prefix}/share/man.
Check the Host Distros compatibility list for distro-specific instructions.
Dependencies
Distrobox depends on a container manager to work, you can choose to install
either podman, docker or lilipod.
Please look in the Compatibility Table for your distribution notes.
There are ways to install Podman without root privileges and in home. or Lilipod without root privileges and in home. This should play well with completely sudoless setups and with devices like the Steam Deck (SteamOS).
Uninstallation
If you installed distrobox using the install script in the default install
directory use this:
|
or if you specified a custom path:
|
Else if cloned the project using git clone or using the latest archive release
from HERE,
enter the directory and run ./uninstall, by default it will assume the install
directory was /usr/local if ran as root or ~/.local,
you can specify another directory if needed with ./uninstall --prefix ~/.local

This artwork uses:
- Cardboard Box model by J0Y, licensed under Creative Commons Attribution 4.0.
- GTK Loop Animation by the GNOME Project, licensed under Creative Commons Attribution-ShareAlike 3.0 as a pre-configured scene.
- Distribution Icons by u/walrusz.