engine
rfswift –engine
Select the container engine used by RF Swift.
Synopsis
rfswift --engine ENGINE [command] [options]The --engine flag is a global flag that overrides RF Swift’s auto-detection and forces a specific container engine for the current command. It must be placed before any subcommand.
Options
| Flag | Description | Values |
|---|---|---|
--engine STRING |
Force a specific container engine | docker, podman |
Auto-Detection Behavior
When --engine is not specified, RF Swift automatically detects the available container engine at startup using the following priority:
1. Is Podman installed? → check podman binary + fallback paths
2. Is Docker installed? → check docker binary
3. Is podman-docker shim active? → detect via `docker --version` containing "podman"
4. Is Docker daemon running? → verify daemon connectivityWhen both Docker and Podman are installed, RF Swift defaults to whichever engine responds first. Use --engine to force a specific one:
# Force Docker
rfswift --engine docker run -i sdr_full -n my_container
# Force Podman
rfswift --engine podman run -i sdr_full -n my_containerDocker is used automatically. No --engine flag needed.
rfswift run -i sdr_full -n my_container
# → uses DockerPodman is used automatically. No --engine flag needed.
rfswift run -i sdr_full -n my_container
# → uses Podmanpodman-docker is installed, RF Swift detects it and treats the system as Podman-only, even though the docker command is available.RF Swift will display an error and prompt you to install a container engine:
❌ No container engine found. Please install Docker or Podman.
Run ./install.sh or visit https://rfswift.io/docs/getting-started/Examples
Force Docker
# Pull image with Docker
rfswift --engine docker images pull -i sdr_full
# Run container with Docker
rfswift --engine docker run -i sdr_full -n my_sdr
# List containers managed by Docker
rfswift --engine docker lastForce Podman
# Pull image with Podman
rfswift --engine podman images pull -i sdr_full
# Run rootless container with Podman
rfswift --engine podman run -i sdr_full -n rootless_sdr
# List containers managed by Podman
rfswift --engine podman lastMixed Workflows
If both engines are installed, you can maintain separate environments:
# Docker for privileged hardware work
rfswift --engine docker run -i sdr_full -n docker_sdr \
-u 1 \
-s /dev/bus/usb:/dev/bus/usb
# Podman for rootless analysis
rfswift --engine podman run -i reversing -n podman_analysis \
-u 0 \
-t none \
-b ~/samples:/root/samples:ro--engine docker cannot be accessed with --engine podman and vice versa.Engine Comparison
| Docker | Podman | |
|---|---|---|
| Architecture | Client-server (daemon) | Daemonless (fork-exec) |
| Root required | Yes (daemon runs as root) | No (rootless by default) |
| Socket | /var/run/docker.sock |
$XDG_RUNTIME_DIR/podman/podman.sock |
| Image format | OCI / Docker | OCI / Docker |
| Compose | docker-compose |
podman-compose |
| Privileged mode | Full host access | User-namespace scoped |
| Device passthrough | Native | Supported (may need --device flags) |
| Networking (rootless) | N/A (daemon is root) | slirp4netns or pasta |
| Best for | Broad ecosystem, Windows/macOS | Security-focused, air-gapped, embedded |
Podman-Specific Notes
Rootless Configuration
Podman runs rootless by default. Ensure your system is configured:
# Check subordinate UID/GID ranges
grep $USER /etc/subuid /etc/subgid
# If empty, configure them
sudo usermod --add-subuids 100000-165535 $USER
sudo usermod --add-subgids 100000-165535 $USER
# Enable lingering (containers survive logout)
sudo loginctl enable-linger $USER
# Enable Podman socket (Docker API compatibility)
systemctl --user enable --now podman.socketImage Registry
Podman may prompt for a registry when using short image names:
# Full name (no prompt)
rfswift --engine podman images pull -i docker.io/penthertz/rfswift:sdr_full
# Short name (may prompt for registry selection)
rfswift --engine podman images pull -i sdr_fullTo avoid prompts, configure default registries in /etc/containers/registries.conf:
unqualified-search-registries = ["docker.io"]Privileged Mode Differences
In rootless Podman, -u 1 (privileged) grants privileges within the user namespace, which is still more restricted than Docker’s privileged mode:
# Docker privileged = full host root access
rfswift --engine docker run -i sdr_full -n docker_priv -u 1
# Podman privileged = root within user namespace (safer)
rfswift --engine podman run -i sdr_full -n podman_priv -u 1Cgroup Compatibility
RF Swift auto-detects cgroup v1 and v2 and configures device access rules accordingly. No manual configuration is needed.
Docker-Specific Notes
Daemon Requirement
Docker requires its daemon to be running:
# Check daemon status
sudo systemctl status docker
# Start if stopped
sudo systemctl start docker
# Enable at boot
sudo systemctl enable dockerGroup Membership
To run Docker without sudo:
sudo usermod -aG docker $USER
newgrp dockerTroubleshooting
Engine Not Found
Error: No container engine found
Solution:
# Install via RF Swift installer
curl -fsSL "https://get.rfswift.io/" | sh
# Or install manually
sudo apt install podman # Debian/Ubuntu
sudo dnf install podman # Fedora
curl -fsSL https://get.docker.com | sudo sh # DockerWrong Engine Detected
Problem: RF Swift picks Docker when you want Podman (or vice versa)
Solution:
# Explicit override
rfswift --engine podman run -i sdr_full -n my_containerpodman-docker Shim Detected as Docker
Problem: podman-docker package makes docker command available but it’s actually Podman
Solution: RF Swift handles this automatically. It checks docker --version output for the word “podman” and correctly identifies the engine. No action needed.
Containers Not Visible Across Engines
Problem: Created a container with Docker but can’t see it with Podman
Solution: This is expected behavior. Each engine manages its own containers and images independently. Use the same --engine flag you used to create the container:
# If created with Docker
rfswift --engine docker exec -c my_container
# If created with Podman
rfswift --engine podman exec -c my_containerRelated
run- Create and run containersexec- Enter existing containersimages- Manage container images- Getting Started - Installation and engine setup
- Container Engine Support - Requirements and platform support
--engine at all — RF Swift auto-detects and uses whatever is available. The flag is only needed when both engines are installed and you want to force a specific one.