Troubleshooting
“Command not found” after activation
Section titled ““Command not found” after activation”- Verify a crate is active: check if
$BULKERCRATEis set. - Verify the command exists in the crate:
bulker crate inspect <crate>. - Check your PATH includes the crate directory:
echo $PATH. - Make sure the shell function is loaded. Run
type bulker— it should show a shell function, not just a binary path. If not, re-runeval "$(bulker init-shell bash)"or restart your shell.
Container not starting
Section titled “Container not starting”- Check which engine is configured:
bulker config get container_engine. - Verify the engine is running:
docker infoorapptainer version. - Check the image exists:
docker pull <image>manually. - Print the exact command being run:
bulker exec -p <crate> -- <command>or setBULKER_PRINT_COMMAND=1.
Permission denied
Section titled “Permission denied”- Files owned by root: The container may be running as root. Check if the manifest sets
no_user: true— if so, files created inside the container will be owned by root. - Cannot access mounted volumes: Ensure the volume paths exist on the host and are readable.
- macOS vs Linux: On macOS,
system_volumesisfalseby default (system paths like/etc/passwddon’t exist as on Linux). If you see permission errors related to user mapping on macOS, check thathost_networkandsystem_volumesare bothfalse.
Manifest not found
Section titled “Manifest not found”- Check the registry URL:
bulker config get registry_url. - Verify the format:
namespace/crate:tag(e.g.,databio/pepatac:1.0.14). - Try loading from a local file:
bulker activate ./path/to/manifest.yaml. - Check if the manifest exists at the registry: visit
http://hub.bulker.io/namespace/crate_tag.yamlin a browser.
Slow first activation
Section titled “Slow first activation”The first time you activate a crate, bulker:
- Fetches the manifest from the registry (fast).
- Creates shimlinks (fast).
- On the first command invocation, Docker pulls the image (can be slow).
To avoid the delay at command time, pre-cache with image pulls:
bulker crate install <crate> -bThe -b flag pulls all container images upfront.
Shell function not working
Section titled “Shell function not working”If bulker activate prints output but doesn’t change your PATH:
- The shell function may not be loaded. Check:
type bulker. - Re-add to your shell RC file:
eval "$(bulker init-shell bash)"(orzsh). - Restart your shell or
source ~/.bashrc.
For scripts and CI where the shell function isn’t available, use bulker exec instead.
Config file issues
Section titled “Config file issues”Bulker works without a config file — it auto-detects your container engine and creates one on first use at ~/.config/bulker/bulker_config.yaml. If you need to reset your config:
bulker config init --forceTo see the effective config (including defaults for fields not in the file):
bulker config show --effectiveActivation fails on read-only /tmp
Section titled “Activation fails on read-only /tmp”Bulker creates a temporary directory of shimlinks on each activation. By default this uses the system temp directory (usually /tmp). If /tmp is read-only or unavailable (e.g., in restricted HPC environments), set TMPDIR to a writable location:
export TMPDIR=/scratch/$USER/tmpmkdir -p "$TMPDIR"bulker activate demoBulker uses the standard TMPDIR convention, so this works with any writable directory. For a complete guide to running bulker on HPC clusters, see Running Bulker on HPC Clusters.
Apptainer-specific issues
Section titled “Apptainer-specific issues”- First run is slow: Apptainer converts Docker images to
.siffiles on first use. Subsequent runs use the cached.sif. - Image cache location: Check
bulker config get apptainer_image_folder(default:~/.local/share/apptainer/images). - Both
apptainerandsingularitywork: bulker uses whichever is on your PATH.