nektos/act · critical
Unsupported Operation
Error message
Unsupported Operation
What it means
ImageExistsLocally in docker_stub.go returns 'Unsupported Operation' because the binary was compiled without Docker support. The file's build tag is 'WITHOUT_DOCKER || !(linux || darwin || windows || netbsd)', so this code is active when act is built with the WITHOUT_DOCKER tag or for an OS outside the supported set. Every Docker-backed function becomes a stub, and this one reports that image inspection is unavailable in such builds.
Source
Thrown at pkg/container/docker_stub.go:17
//go:build WITHOUT_DOCKER || !(linux || darwin || windows || netbsd)
package container
import (
"context"
"runtime"
"github.com/moby/moby/api/types/system"
"github.com/nektos/act/pkg/common"
"github.com/pkg/errors"
)
// ImageExistsLocally returns a boolean indicating if an image with the
// requested name, tag and architecture exists in the local docker image store
func ImageExistsLocally(ctx context.Context, imageName string, platform string) (bool, error) {
return false, errors.New("Unsupported Operation")
}
// RemoveImage removes image from local store, the function is used to run different
// container image architectures
func RemoveImage(ctx context.Context, imageName string, force bool, pruneChildren bool) (bool, error) {
return false, errors.New("Unsupported Operation")
}
// NewDockerBuildExecutor function to create a run executor for the container
func NewDockerBuildExecutor(input NewDockerBuildExecutorInput) common.Executor {
return func(ctx context.Context) error {
return errors.New("Unsupported Operation")
}
}
// NewDockerPullExecutor function to create a run executor for the container
func NewDockerPullExecutor(input NewDockerPullExecutorInput) common.Executor {
return func(ctx context.Context) error {View on GitHub (pinned to 4f41128141)
Solutions
- Install an official act release built for a supported OS (linux, darwin, windows, netbsd) without the WITHOUT_DOCKER tag.
- If building from source, drop -tags WITHOUT_DOCKER from your build command.
- If you intentionally need a Docker-less build, use act's host execution mode (-P ...=-self-hosted) which avoids the Docker code paths, or accept that image operations are unsupported.
- When importing act as a library, ensure your build tags match the execution environment you target.
Example fix
# before go build -tags WITHOUT_DOCKER -o act ./cmd/act ./act -j build # ImageExistsLocally -> Unsupported Operation # after go build -o act ./cmd/act ./act -j build
Defensive patterns
Strategy: validation
Validate before calling
// Detect a Docker-less build before calling image APIs
package main
import (
"runtime"
)
//go:build WITHOUT_DOCKER || !(linux || darwin || windows || netbsd)
const dockerSupportCompiled = false
// companion file with the inverse tag sets it to true; then:
func checkImageSupport() error {
if !dockerSupportCompiled {
return fmt.Errorf("act built without docker support; image lookups unavailable on %s", runtime.GOOS)
}
return nil
} Try / catch
if ok, err := container.ImageExistsLocally(ctx, image, platform); err != nil {
if err.Error() == "Unsupported Operation" {
// Docker-less build: skip local-image optimization and let pull fail or use host mode
ok = false
} else {
return err
}
} Prevention
- Install official act binaries for linux/darwin/windows/netbsd built without WITHOUT_DOCKER.
- When embedding act as a library, keep your build tags aligned with the deployment environment.
- Smoke-test 'act -j <id>' once after installing; Docker-less builds fail on any container operation.
When it happens
Trigger: Calling container.ImageExistsLocally from code that imports a build of act compiled with -tags WITHOUT_DOCKER, or running an act binary produced for an unsupported GOOS. The function is invoked during job setup to decide whether an image pull is needed.
Common situations: Installing a distro-packaged act built with WITHOUT_DOCKER (common in limited environments); building act from source on an exotic platform; importing act as a library into a project whose CI compiles with the same tags; running act --list works but actual job execution fails because every container operation is stubbed.
Related errors
- Failed to create job container
- --userns: invalid USER mode
- no name set for network
- --pid: invalid PID mode
- --uts: invalid UTS mode
AI-assisted analysis of nektos/act@4f41128141 (2026-08-15).
Data as JSON: /api/errors/0b5604b58303e7ca.
Report an issue: GitHub.