A minimal Docker image that fetches and executes shell scripts from URLs. Uses mvdan/sh, a POSIX shell interpreter written in pure Go.
FROM scaffoldly/run AS run
FROM ubuntu:latest
COPY --from=run / /
CMD ["RUN", "https://example.com/script.sh", "arg1", "arg2"]The COPY --from=run / / pattern adds the RUN binary to any base image, allowing scripts to use the base image's utilities.
Also available at ghcr.io/scaffoldly/run.
See the examples directory for more examples.
Use +env to send environment variables as HTTP headers when fetching scripts:
CMD ["RUN", "+env", "https://example.com/script.sh"]Each environment variable is sent as an X-Env-* header:
API_KEY=secret→X-Env-API_KEY: secretFOO=bar→X-Env-FOO: bar
This allows dynamic script generation based on the container's environment.
The default User-Agent is run/1.0 (scaffoldly). Set the USER_AGENT environment variable to override it:
ENV USER_AGENT="MyApp/1.0"
CMD ["RUN", "https://example.com/script.sh"]Use +raw to print the fetched script without executing it:
RUN +raw https://example.com/script.shThis is useful for debugging or piping the script to another tool.
Use +nocache to request fresh content from the origin server:
RUN +nocache https://example.com/script.shThis sets Cache-Control: no-cache, no-store, must-revalidate and Pragma: no-cache headers.
- Minimal footprint: ~4MB image (compressed Go binary with embedded CA certificates)
- No shell required: The POSIX shell interpreter is embedded in the Go binary
- Argument passing: Pass arguments to scripts via
$1,$2, etc. - HTTPS support: CA certificates embedded in the binary
- Environment forwarding: Send env vars as HTTP headers with
+env - Custom User-Agent: Set
USER_AGENTenv var to customize the request header - Raw output: Use
+rawto print the script without executing - Cache bypass: Use
+nocacheto skip CDN caches - Compatible: Overlay onto any base image with
COPY --from=run / /
docker build -t run .- Scripts must be POSIX-compliant (no bash-specific features like arrays,
[[,set -E, etc.) - External commands must exist in the base image
MIT