Help us shape the future of Go! Take the 2026 Go Developer Survey

execdriver

package
v1.8.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2015 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotRunning              = errors.New("Container is not running")
	ErrWaitTimeoutReached      = errors.New("Wait timeout reached")
	ErrDriverAlreadyRegistered = errors.New("A driver already registered this docker init function")
	ErrDriverNotFound          = errors.New("The requested docker init has not been found")
)

Functions

func GetAllCapabilities added in v1.6.0

func GetAllCapabilities() []string

func InitContainer added in v1.6.0

func InitContainer(c *Command) *configs.Config

func SetupCgroups added in v1.6.0

func SetupCgroups(container *configs.Config, c *Command) error

func TweakCapabilities added in v1.2.0

func TweakCapabilities(basics, adds, drops []string) ([]string, error)

Types

type Capabilities added in v1.6.0

type Capabilities []*CapabilityMapping

type CapabilityMapping added in v1.6.0

type CapabilityMapping struct {
	Key   string         `json:"key,omitempty"`
	Value capability.Cap `json:"value,omitempty"`
}

func GetCapability added in v1.6.0

func GetCapability(key string) *CapabilityMapping

func (*CapabilityMapping) String added in v1.6.0

func (c *CapabilityMapping) String() string

type Command

type Command struct {
	ID                 string            `json:"id"`
	Rootfs             string            `json:"rootfs"` // root fs of the container
	ReadonlyRootfs     bool              `json:"readonly_rootfs"`
	InitPath           string            `json:"initpath"` // dockerinit
	WorkingDir         string            `json:"working_dir"`
	ConfigPath         string            `json:"config_path"` // this should be able to be removed when the lxc template is moved into the driver
	Network            *Network          `json:"network"`
	Ipc                *Ipc              `json:"ipc"`
	Pid                *Pid              `json:"pid"`
	UTS                *UTS              `json:"uts"`
	Resources          *Resources        `json:"resources"`
	Mounts             []Mount           `json:"mounts"`
	AllowedDevices     []*configs.Device `json:"allowed_devices"`
	AutoCreatedDevices []*configs.Device `json:"autocreated_devices"`
	CapAdd             []string          `json:"cap_add"`
	CapDrop            []string          `json:"cap_drop"`
	GroupAdd           []string          `json:"group_add"`
	ContainerPid       int               `json:"container_pid"`  // the pid for the process inside a container
	ProcessConfig      ProcessConfig     `json:"process_config"` // Describes the init process of the container.
	ProcessLabel       string            `json:"process_label"`
	MountLabel         string            `json:"mount_label"`
	LxcConfig          []string          `json:"lxc_config"`
	AppArmorProfile    string            `json:"apparmor_profile"`
	CgroupParent       string            `json:"cgroup_parent"` // The parent cgroup for this command.
	FirstStart         bool              `json:"first_start"`
	LayerPaths         []string          `json:"layer_paths"` // Windows needs to know the layer paths and folder for a command
	LayerFolder        string            `json:"layer_folder"`
}

TODO Windows: Factor out unused fields such as LxcConfig, AppArmorProfile, and CgroupParent.

Process wrapps an os/exec.Cmd to add more metadata

type Context

type Context map[string]string

Context is a generic key value pair that allows arbatrary data to be sent

type Driver

type Driver interface {
	Run(c *Command, pipes *Pipes, startCallback StartCallback) (ExitStatus, error) // Run executes the process and blocks until the process exits and returns the exit code
	// Exec executes the process in an existing container, blocks until the process exits and returns the exit code
	Exec(c *Command, processConfig *ProcessConfig, pipes *Pipes, startCallback StartCallback) (int, error)
	Kill(c *Command, sig int) error
	Pause(c *Command) error
	Unpause(c *Command) error
	Name() string                                 // Driver name
	Info(id string) Info                          // "temporary" hack (until we move state from core to plugins)
	GetPidsForContainer(id string) ([]int, error) // Returns a list of pids for the given container.
	Terminate(c *Command) error                   // kill it with fire
	Clean(id string) error                        // clean all traces of container exec
	Stats(id string) (*ResourceStats, error)      // Get resource stats for a running container
}

type ExitStatus added in v1.4.0

type ExitStatus struct {
	// The exit code with which the container exited.
	ExitCode int

	// Whether the container encountered an OOM.
	OOMKilled bool
}

ExitStatus provides exit reasons for a container.

type Info

type Info interface {
	IsRunning() bool
}

Driver specific information based on processes registered with the driver

type Ipc added in v1.4.0

type Ipc struct {
	ContainerID string `json:"container_id"` // id of the container to join ipc.
	HostIpc     bool   `json:"host_ipc"`
}

IPC settings of the container

type Mount

type Mount struct {
	Source      string `json:"source"`
	Destination string `json:"destination"`
	Writable    bool   `json:"writable"`
	Private     bool   `json:"private"`
	Slave       bool   `json:"slave"`
}

type Network

type Network struct {
	Interface      *NetworkInterface `json:"interface"` // if interface is nil then networking is disabled
	Mtu            int               `json:"mtu"`
	ContainerID    string            `json:"container_id"` // id of the container to join network.
	NamespacePath  string            `json:"namespace_path"`
	HostNetworking bool              `json:"host_networking"`
}

Network settings of the container

type NetworkInterface

type NetworkInterface struct {
	Gateway              string `json:"gateway"`
	IPAddress            string `json:"ip"`
	IPPrefixLen          int    `json:"ip_prefix_len"`
	MacAddress           string `json:"mac"`
	Bridge               string `json:"bridge"`
	GlobalIPv6Address    string `json:"global_ipv6"`
	LinkLocalIPv6Address string `json:"link_local_ipv6"`
	GlobalIPv6PrefixLen  int    `json:"global_ipv6_prefix_len"`
	IPv6Gateway          string `json:"ipv6_gateway"`
	HairpinMode          bool   `json:"hairpin_mode"`
}

type Pid added in v1.5.0

type Pid struct {
	HostPid bool `json:"host_pid"`
}

PID settings of the container

type Pipes

type Pipes struct {
	Stdin          io.ReadCloser
	Stdout, Stderr io.Writer
}

Pipes is a wrapper around a containers output for stdin, stdout, stderr

func NewPipes

func NewPipes(stdin io.ReadCloser, stdout, stderr io.Writer, useStdin bool) *Pipes

type ProcessConfig added in v1.3.0

type ProcessConfig struct {
	exec.Cmd `json:"-"`

	Privileged  bool     `json:"privileged"`
	User        string   `json:"user"`
	Tty         bool     `json:"tty"`
	Entrypoint  string   `json:"entrypoint"`
	Arguments   []string `json:"arguments"`
	Terminal    Terminal `json:"-"` // standard or tty terminal
	Console     string   `json:"-"` // dev/console path
	ConsoleSize [2]int   `json:"-"` // h,w of initial console size
}

Describes a process that will be run inside a container.

type ResourceStats added in v1.5.0

type ResourceStats struct {
	*libcontainer.Stats
	Read        time.Time `json:"read"`
	MemoryLimit int64     `json:"memory_limit"`
	SystemUsage uint64    `json:"system_usage"`
}

func Stats added in v1.6.0

func Stats(containerDir string, containerMemoryLimit int64, machineMemory int64) (*ResourceStats, error)

type Resources

type Resources struct {
	Memory           int64            `json:"memory"`
	MemorySwap       int64            `json:"memory_swap"`
	CpuShares        int64            `json:"cpu_shares"`
	CpusetCpus       string           `json:"cpuset_cpus"`
	CpusetMems       string           `json:"cpuset_mems"`
	CpuPeriod        int64            `json:"cpu_period"`
	CpuQuota         int64            `json:"cpu_quota"`
	BlkioWeight      int64            `json:"blkio_weight"`
	Rlimits          []*ulimit.Rlimit `json:"rlimits"`
	OomKillDisable   bool             `json:"oom_kill_disable"`
	MemorySwappiness int64            `json:"memory_swappiness"`
}

TODO Windows: Factor out ulimit.Rlimit

type StartCallback

type StartCallback func(*ProcessConfig, int)

type StdConsole

type StdConsole struct {
}

func NewStdConsole

func NewStdConsole(processConfig *ProcessConfig, pipes *Pipes) (*StdConsole, error)

func (*StdConsole) AttachPipes

func (s *StdConsole) AttachPipes(command *exec.Cmd, pipes *Pipes) error

func (*StdConsole) Close

func (s *StdConsole) Close() error

func (*StdConsole) Resize

func (s *StdConsole) Resize(h, w int) error

type Terminal

type Terminal interface {
	io.Closer
	Resize(height, width int) error
}

Terminal in an interface for drivers to implement if they want to support Close and Resize calls from the core

type UTS added in v1.7.0

type UTS struct {
	HostUTS bool `json:"host_uts"`
}

UTS settings of the container

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL