Skip to content

Using Podman#

By Ast3risk-ops @Ast3risk-ops

This guide is written for more experienced Linux users.

In order to run other containers (like servers) on blendOS, you must first understand that you cannot use Docker as it will cause conflicts. blendOS already has a different container runtime on the system, Podman.

Podman is like Docker, but fast, light, rootless, and small. It's 100% compatible with the Docker API and CLI syntax. It really is as simple as this:

Let's say I want to run a docker container for nginx. Instead of using docker:

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d -p 8080:80 nginx

I can use Podman:

podman run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d -p 8080:80 docker.io/nginx

Docker Hub Prefixes

You will notice I prefix images with docker.io/ under Podman. This is because Podman does not use "default" registries.

All images from Docker Hub must be used as docker.io/image (for official/sponsored images) or docker.io/author/image. All other registries work as usual.

You can install podman-docker to the host or make a shell alias to make this even easier.

For docker-compose files, just change the image: section to be prefixed with docker.io if the image is remote and on Docker Hub. Then, just use podman compose instead of docker compose.

Apps that use Docker#

For apps like lazydocker that don't support Podman directly, you will need to change your $DOCKER_HOST variable. First, check what it's already set to:

echo $DOCKER_HOST

If it points to a file called podman.sock anywhere, you're fine, just start the user service and socket (shown below).

If not (or if it's empty), change its value to the Podman user socket path, find this with systemctl status --user podman.socket:

Podman Socket example

Edit your .bashrc (or whatever your shell config is) and add the following:

.bashrc
export DOCKER_HOST="unix://<socket path>"

Example:

.bashrc
export DOCKER_HOST="unix:///run/user/1000/podman/podman.sock"

Instead of docker.service and docker.socket, you will have podman.service and podman.socket for rooted containers (not recommended unless rootless fails), as well as the user services (systemctl --user) of podman.service and podman.socket (only these two user services must be started).

system.yaml
user-services:
  - 'podman'
  - 'podman.socket'