hashicorp/nomad · error

CreateNetwork RPC not supported by driver

Error message

CreateNetwork RPC not supported by driver

What it means

CreateNetwork on the driver plugin server requires the underlying driver to implement the DriverNetworkManager interface. If the driver does not, the RPC is unsupported and this error is returned to the caller.

Source

Thrown at plugins/drivers/server.go:418

			TaskName:    event.TaskName,
			Timestamp:   pbTimestamp,
			Message:     event.Message,
			Annotations: event.Annotations,
		}

		if err = srv.Send(pbEvent); err == io.EOF {
			break
		} else if err != nil {
			return err
		}
	}
	return nil
}

func (b *driverPluginServer) CreateNetwork(ctx context.Context, req *proto.CreateNetworkRequest) (*proto.CreateNetworkResponse, error) {
	nm, ok := b.impl.(DriverNetworkManager)
	if !ok {
		return nil, fmt.Errorf("CreateNetwork RPC not supported by driver")
	}

	spec, created, err := nm.CreateNetwork(req.GetAllocId(), networkCreateRequestFromProto(req))
	if err != nil {
		return nil, err
	}

	return &proto.CreateNetworkResponse{
		IsolationSpec: NetworkIsolationSpecToProto(spec),
		Created:       created,
	}, nil
}

func (b *driverPluginServer) DestroyNetwork(ctx context.Context, req *proto.DestroyNetworkRequest) (*proto.DestroyNetworkResponse, error) {
	nm, ok := b.impl.(DriverNetworkManager)
	if !ok {
		return nil, fmt.Errorf("DestroyNetwork RPC not supported by driver")
	}

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Use a driver that implements DriverNetworkManager (e.g. exec/qemu/docker variants with network support).
  2. Upgrade the driver plugin to a version implementing DriverNetworkManager.
  3. Remove network isolation requirements (network stanza / isolation features) from the task when using this driver.

Example fix

// before
func (d *MyDriver) TaskStart(...) error { ... } // no network manager
// after
func (d *MyDriver) CreateNetwork(allocID string, spec *drivers.NetworkIsolationSpec) (string, bool, error) {
	return d.net.CreateNetwork(allocID, spec)
}
Defensive patterns

Strategy: type-guard

Validate before calling

// Verify the driver supports network management before requesting isolation
if _, ok := drv.(drivers.DriverNetworkManager); !ok {
	return errors.New("driver cannot create networks; remove network isolation requirements")
}

Type guard

func supportsNetworkManager(d interface{}) bool {
	_, ok := d.(drivers.DriverNetworkManager)
	return ok
}

Try / catch

_, err := client.CreateNetwork(ctx, req)
if err != nil && err.Error() == "CreateNetwork RPC not supported by driver" {
	// fall back to host networking or fail scheduling with a clear message
}

Prevention

When it happens

Trigger: Calling CreateNetwork (e.g. via Nomad's network isolation hooks / bridge or netns setup) against a driver plugin that does not implement DriverNetworkManager.

Common situations: Task drivers without network namespace support being scheduled with network isolation requirements; older plugin binaries lacking the network manager capability; misconfigured task group requesting CNI/netns features with an incompatible driver.

Related errors


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/8ff4c7b00262433a. Report an issue: GitHub.