nektos/act · error

Cannot parse networkmode=%s. This is an internal error and s

Error message

Cannot parse networkmode=%s. This is an internal error and should not happen: '%w'

What it means

If the user's container options did not set a network mode, act injects its own --network value (cr.input.NetworkMode) into the parsed flag set. copts.netMode.Set failing here means the internal network mode string is invalid for the pflag value type. The message itself says this is an internal error and should not happen for users.

Source

Thrown at pkg/container/docker_run.go:378

	}

	// parse configuration from CLI container.options
	flags := pflag.NewFlagSet("container_flags", pflag.ContinueOnError)
	copts := addFlags(flags)

	optionsArgs, err := shellquote.Split(input.Options)
	if err != nil {
		return nil, nil, fmt.Errorf("Cannot split container options: '%s': '%w'", input.Options, err)
	}

	err = flags.Parse(optionsArgs)
	if err != nil {
		return nil, nil, fmt.Errorf("Cannot parse container options: '%s': '%w'", input.Options, err)
	}

	if len(copts.netMode.Value()) == 0 {
		if err = copts.netMode.Set(cr.input.NetworkMode); err != nil {
			return nil, nil, fmt.Errorf("Cannot parse networkmode=%s. This is an internal error and should not happen: '%w'", cr.input.NetworkMode, err)
		}
	}

	containerConfig, err := parse(flags, copts, runtime.GOOS)
	if err != nil {
		return nil, nil, fmt.Errorf("Cannot process container options: '%s': '%w'", input.Options, err)
	}

	logger.Debugf("Custom container.Config from options ==> %+v", containerConfig.Config)

	err = mergo.Merge(config, containerConfig.Config, mergo.WithOverride)
	if err != nil {
		return nil, nil, fmt.Errorf("Cannot merge container.Config options: '%s': '%w'", input.Options, err)
	}
	logger.Debugf("Merged container.Config ==> %+v", config)

	logger.Debugf("Custom container.HostConfig from options ==> %+v", containerConfig.HostConfig)

View on GitHub (pinned to 4f41128141)

Solutions

  1. If embedding act: set NetworkMode to a valid value, e.g. "host" or the default act network name
  2. Update act — internal wiring bugs around network mode have been fixed over time
  3. Report the issue upstream with your act version and options string if it reproduces on the CLI

Example fix

// Go caller embedding act
input := &container.NewContainerInput{
    NetworkMode: "host", // before: "" or a typo'd value
    ...
}
Defensive patterns

Strategy: try-catch

Validate before calling

// Go (embedding act): validate NetworkMode before constructing input
switch input.NetworkMode {
case "", "host", "none", "bridge":
default:
    if !strings.HasPrefix(input.NetworkMode, "container:") && !isValidNetworkName(input.NetworkMode) {
        return fmt.Errorf("invalid NetworkMode %q", input.NetworkMode)
    }
}

Try / catch

// Go: internal invariant — fail fast and report, don't retry
if err := exec(ctx); err != nil && strings.Contains(err.Error(), "internal error") {
    return fmt.Errorf("act internal error, please report: %w", err)
}

Prevention

When it happens

Trigger: A code path or act version where NewContainerInput.NetworkMode is empty or set to a string the network-mode flag value rejects (e.g. an unsupported value passed programmatically when embedding act as a library).

Common situations: Almost never seen by CLI users. Library consumers constructing NewContainerInput by hand with a bad/empty NetworkMode are the realistic audience.

Related errors


AI-assisted analysis of nektos/act@4f41128141 (2026-08-15). Data as JSON: /api/errors/5694f4b335b1961a. Report an issue: GitHub.