container

package
v0.0.0-...-288be08 Latest Latest
Warning

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

Go to latest
Published: Aug 14, 2019 License: Apache-2.0 Imports: 51 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultSHMSize is the default size (64MB) of the SHM which will be mounted in the container
	DefaultSHMSize int64 = 67108864
)
View Source
const (
	// DefaultStopTimeout is the timeout (in seconds) for the syscall signal used to stop a container.
	DefaultStopTimeout = 10
)

Variables

This section is empty.

Functions

func AttachStreams

func AttachStreams(ctx context.Context, streamConfig *stream.Config, openStdin, stdinOnce, tty bool, stdin io.ReadCloser, stdout io.Writer, stderr io.Writer, keys []byte) chan error

AttachStreams connects streams to a TTY. Used by exec too. Should this move somewhere else?

func GetSandboxPortMapInfo

func GetSandboxPortMapInfo(sb libnetwork.Sandbox) nat.PortMap

GetSandboxPortMapInfo retrieves the current port-mapping programmed for the given sandbox

func IsValidHealthString

func IsValidHealthString(s string) bool

IsValidHealthString checks if the provided string is a valid container health status or not.

func IsValidStateString

func IsValidStateString(s string) bool

IsValidStateString checks if the provided string is a valid container state or not.

Types

type CommonContainer

type CommonContainer struct {
	StreamConfig *stream.Config
	// embed for Container to support states directly.
	*State          `json:"State"` // Needed for Engine API version <= 1.11
	Root            string         `json:"-"` // Path to the "home" of the container, including metadata.
	BaseFS          string         `json:"-"` // Path to the graphdriver mountpoint
	RWLayer         layer.RWLayer  `json:"-"`
	ID              string
	Created         time.Time
	Managed         bool
	Path            string
	Args            []string
	Config          *containertypes.Config
	ImageID         image.ID `json:"Image"`
	NetworkSettings *network.Settings
	LogPath         string
	Name            string
	Driver          string
	// MountLabel contains the options for the 'mount' command
	MountLabel             string
	ProcessLabel           string
	RestartCount           int
	HasBeenStartedBefore   bool
	HasBeenManuallyStopped bool // used for unless-stopped restart policy
	MountPoints            map[string]*volume.MountPoint
	HostConfig             *containertypes.HostConfig `json:"-"` // do not serialize the host config in the json, otherwise we'll make the container unportable
	ExecCommands           *exec.Store                `json:"-"`
	SecretStore            agentexec.SecretGetter     `json:"-"`
	SecretReferences       []*swarmtypes.SecretReference
	// logDriver for closing
	LogDriver logger.Logger  `json:"-"`
	LogCopier *logger.Copier `json:"-"`
	// contains filtered or unexported fields
}

CommonContainer holds the fields for a container which are applicable across all platforms supported by the daemon.

type Container

type Container struct {
	CommonContainer

	// Fields below here are platform specific.
	AppArmorProfile string
	HostnamePath    string
	HostsPath       string
	ShmPath         string
	ResolvConfPath  string
	SeccompProfile  string
	NoNewPrivileges bool
}

Container holds the fields specific to unixen implementations. See CommonContainer for standard fields common to all containers.

func NewBaseContainer

func NewBaseContainer(id, root string) *Container

NewBaseContainer creates a new container with its basic configuration.

func (*Container) AddMountPointWithVolume

func (container *Container) AddMountPointWithVolume(destination string, vol volume.Volume, rw bool)

AddMountPointWithVolume adds a new mount point configured with a volume to the container.

func (*Container) Attach

func (container *Container) Attach(stdin io.ReadCloser, stdout io.Writer, stderr io.Writer, keys []byte) chan error

Attach connects to the container's TTY, delegating to standard streams or websockets depending on the configuration.

func (*Container) BuildCreateEndpointOptions

func (container *Container) BuildCreateEndpointOptions(n libnetwork.Network, epConfig *networktypes.EndpointSettings, sb libnetwork.Sandbox, daemonDNS []string) ([]libnetwork.EndpointOption, error)

BuildCreateEndpointOptions builds endpoint options from a given network.

func (*Container) BuildEndpointInfo

func (container *Container) BuildEndpointInfo(n libnetwork.Network, ep libnetwork.Endpoint) error

BuildEndpointInfo sets endpoint-related fields on container.NetworkSettings based on the provided network and endpoint.

func (*Container) BuildHostnameFile

func (container *Container) BuildHostnameFile() error

BuildHostnameFile writes the container's hostname file.

func (*Container) BuildJoinOptions

func (container *Container) BuildJoinOptions(n libnetwork.Network) ([]libnetwork.EndpointOption, error)

BuildJoinOptions builds endpoint Join options from a given network.

func (*Container) CancelAttachContext

func (container *Container) CancelAttachContext()

CancelAttachContext cancels attach context. All attach calls should detach after this call.

func (*Container) CheckpointDir

func (container *Container) CheckpointDir() string

CheckpointDir returns the directory checkpoints are stored in

func (*Container) CloseStreams

func (container *Container) CloseStreams() error

CloseStreams closes the container's stdio streams

func (*Container) ConfigPath

func (container *Container) ConfigPath() (string, error)

ConfigPath returns the path to the container's JSON config

func (*Container) CopyImagePathContent

func (container *Container) CopyImagePathContent(v volume.Volume, destination string) error

CopyImagePathContent copies files in destination to the volume.

func (*Container) CreateDaemonEnvironment

func (container *Container) CreateDaemonEnvironment(tty bool, linkedEnv []string) []string

CreateDaemonEnvironment returns the list of all environment variables given the list of environment variables related to links. Sets PATH, HOSTNAME and if container.Config.Tty is set: TERM. The defaults set here do not override the values in container.Config.Env

func (*Container) DetachAndUnmount

func (container *Container) DetachAndUnmount(volumeEventLog func(name, action string, attributes map[string]string)) error

DetachAndUnmount uses a detached mount on all mount destinations, then unmounts each volume normally. This is used from daemon/archive for `docker cp`

func (*Container) EnableServiceDiscoveryOnDefaultNetwork

func (container *Container) EnableServiceDiscoveryOnDefaultNetwork() bool

EnableServiceDiscoveryOnDefaultNetwork Enable service discovery on default network

func (*Container) ExitOnNext

func (container *Container) ExitOnNext()

ExitOnNext signals to the monitor that it should not restart the container after we send the kill signal.

func (*Container) FromDisk

func (container *Container) FromDisk() error

FromDisk loads the container configuration stored in the host.

func (*Container) FullHostname

func (container *Container) FullHostname() string

FullHostname returns hostname and optional domain appended to it.

func (*Container) GetEndpointInNetwork

func (container *Container) GetEndpointInNetwork(n libnetwork.Network) (libnetwork.Endpoint, error)

GetEndpointInNetwork returns the container's endpoint to the provided network.

func (*Container) GetExecIDs

func (container *Container) GetExecIDs() []string

GetExecIDs returns the list of exec commands running on the container.

func (*Container) GetMountLabel

func (container *Container) GetMountLabel() string

GetMountLabel returns the mounting label for the container. This label is empty if the container is privileged.

func (*Container) GetProcessLabel

func (container *Container) GetProcessLabel() string

GetProcessLabel returns the process label for the container.

func (*Container) GetResourcePath

func (container *Container) GetResourcePath(path string) (string, error)

GetResourcePath evaluates `path` in the scope of the container's BaseFS, with proper path sanitisation. Symlinks are all scoped to the BaseFS of the container, as though the container's BaseFS was `/`.

The BaseFS of a container is the host-facing path which is bind-mounted as `/` inside the container. This method is essentially used to access a particular path inside the container as though you were a process in that container.

NOTE: The returned path is *only* safely scoped inside the container's BaseFS

if no component of the returned path changes (such as a component
symlinking to a different path) between using this method and using the
path. See symlink.FollowSymlinkInScope for more details.

func (*Container) GetRootResourcePath

func (container *Container) GetRootResourcePath(path string) (string, error)

GetRootResourcePath evaluates `path` in the scope of the container's root, with proper path sanitisation. Symlinks are all scoped to the root of the container, as though the container's root was `/`.

The root of a container is the host-facing configuration metadata directory. Only use this method to safely access the container's `container.json` or other metadata files. If in doubt, use container.GetResourcePath.

NOTE: The returned path is *only* safely scoped inside the container's root

if no component of the returned path changes (such as a component
symlinking to a different path) between using this method and using the
path. See symlink.FollowSymlinkInScope for more details.

func (*Container) HasMountFor

func (container *Container) HasMountFor(path string) bool

HasMountFor checks if path is a mountpoint

func (*Container) HostConfigPath

func (container *Container) HostConfigPath() (string, error)

HostConfigPath returns the path to the container's JSON hostconfig

func (*Container) InitAttachContext

func (container *Container) InitAttachContext() context.Context

InitAttachContext initializes or returns existing context for attach calls to track container liveness.

func (*Container) InitDNSHostConfig

func (container *Container) InitDNSHostConfig()

InitDNSHostConfig ensures that the dns fields are never nil. New containers don't ever have those fields nil, but pre created containers can still have those nil values. The non-recommended host configuration in the start api can make these fields nil again, this corrects that issue until we remove that behavior for good. See https://github.com/docker/docker/pull/17779 for a more detailed explanation on why we don't want that.

func (*Container) InitializeStdio

func (container *Container) InitializeStdio(iop libcontainerd.IOPipe) error

InitializeStdio is called by libcontainerd to connect the stdio.

func (*Container) IpcMounts

func (container *Container) IpcMounts() []Mount

IpcMounts returns the list of IPC mounts

func (*Container) IsDestinationMounted

func (container *Container) IsDestinationMounted(destination string) bool

IsDestinationMounted checks whether a path is mounted on the container or not.

func (*Container) NetworkMounts

func (container *Container) NetworkMounts() []Mount

NetworkMounts returns the list of network mounts.

func (*Container) Reset

func (container *Container) Reset(lock bool)

Reset puts a container into a state where it can be restarted again.

func (*Container) ResetRestartManager

func (container *Container) ResetRestartManager(resetCount bool)

ResetRestartManager initializes new restartmanager based on container config

func (*Container) ResolvePath

func (container *Container) ResolvePath(path string) (resolvedPath, absPath string, err error)

ResolvePath resolves the given path in the container to a resource on the host. Returns a resolved path (absolute path to the resource on the host), the absolute path to the resource relative to the container's rootfs, and an error if the path points to outside the container's rootfs.

func (*Container) RestartManager

func (container *Container) RestartManager() restartmanager.RestartManager

RestartManager returns the current restartmanager instance connected to container.

func (*Container) SecretMount

func (container *Container) SecretMount() *Mount

SecretMount returns the mount for the secret path

func (*Container) SecretMountPath

func (container *Container) SecretMountPath() string

SecretMountPath returns the path of the secret mount for the container

func (*Container) SetupWorkingDirectory

func (container *Container) SetupWorkingDirectory(rootUID, rootGID int) error

SetupWorkingDirectory sets up the container's working directory as set in container.Config.WorkingDir

func (*Container) ShmResourcePath

func (container *Container) ShmResourcePath() (string, error)

ShmResourcePath returns path to shm

func (*Container) ShouldRestart

func (container *Container) ShouldRestart() bool

ShouldRestart decides whether the daemon should restart the container or not. This is based on the container's restart policy.

func (*Container) StartLogger

func (container *Container) StartLogger(cfg containertypes.LogConfig) (logger.Logger, error)

StartLogger starts a new logger driver for the container.

func (*Container) StatPath

func (container *Container) StatPath(resolvedPath, absPath string) (stat *types.ContainerPathStat, err error)

StatPath is the unexported version of StatPath. Locks and mounts should be acquired before calling this method and the given path should be fully resolved to a path on the host corresponding to the given absolute path inside the container.

func (*Container) StderrPipe

func (container *Container) StderrPipe() io.ReadCloser

StderrPipe gets the stderr stream of the container

func (*Container) StdinPipe

func (container *Container) StdinPipe() io.WriteCloser

StdinPipe gets the stdin stream of the container

func (*Container) StdoutPipe

func (container *Container) StdoutPipe() io.ReadCloser

StdoutPipe gets the stdout stream of the container

func (*Container) StopSignal

func (container *Container) StopSignal() int

StopSignal returns the signal used to stop the container.

func (*Container) StopTimeout

func (container *Container) StopTimeout() int

StopTimeout returns the timeout (in seconds) used to stop the container.

func (*Container) TmpfsMounts

func (container *Container) TmpfsMounts() ([]Mount, error)

TmpfsMounts returns the list of tmpfs mounts

func (*Container) ToDisk

func (container *Container) ToDisk() error

ToDisk saves the container configuration on disk.

func (*Container) ToDiskLocking

func (container *Container) ToDiskLocking() error

ToDiskLocking saves the container configuration on disk in a thread safe way.

func (*Container) TrySetNetworkMount

func (container *Container) TrySetNetworkMount(destination string, path string) bool

TrySetNetworkMount attempts to set the network mounts given a provided destination and the path to use for it; return true if the given destination was a network mount file

func (*Container) UnmountIpcMounts

func (container *Container) UnmountIpcMounts(unmount func(pth string) error)

UnmountIpcMounts uses the provided unmount function to unmount shm and mqueue if they were mounted

func (*Container) UnmountSecrets

func (container *Container) UnmountSecrets() error

UnmountSecrets unmounts the local tmpfs for secrets

func (*Container) UnmountVolumes

func (container *Container) UnmountVolumes(volumeEventLog func(name, action string, attributes map[string]string)) error

UnmountVolumes unmounts all volumes

func (*Container) UpdateContainer

func (container *Container) UpdateContainer(hostConfig *containertypes.HostConfig) error

UpdateContainer updates configuration of a container.

func (*Container) UpdateJoinInfo

func (container *Container) UpdateJoinInfo(n libnetwork.Network, ep libnetwork.Endpoint) error

UpdateJoinInfo updates network settings when container joins network n with endpoint ep.

func (*Container) UpdateMonitor

func (container *Container) UpdateMonitor(restartPolicy containertypes.RestartPolicy)

UpdateMonitor updates monitor configure for running container

func (*Container) UpdateSandboxNetworkSettings

func (container *Container) UpdateSandboxNetworkSettings(sb libnetwork.Sandbox) error

UpdateSandboxNetworkSettings updates the sandbox ID and Key.

func (*Container) WriteHostConfig

func (container *Container) WriteHostConfig() error

WriteHostConfig saves the host configuration on disk for the container.

type DetachError

type DetachError struct{}

DetachError is special error which returned in case of container detach.

func (DetachError) Error

func (DetachError) Error() string

type ExitStatus

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 Health

type Health struct {
	types.Health
	// contains filtered or unexported fields
}

Health holds the current container health-check state

func (*Health) CloseMonitorChannel

func (s *Health) CloseMonitorChannel()

CloseMonitorChannel closes any existing monitor channel.

func (*Health) OpenMonitorChannel

func (s *Health) OpenMonitorChannel() chan struct{}

OpenMonitorChannel creates and returns a new monitor channel. If there already is one, it returns nil.

func (*Health) String

func (s *Health) String() string

String returns a human-readable description of the health-check state

type History

type History []*Container

History is a convenience type for storing a list of containers, sorted by creation date in descendant order.

func (*History) Len

func (history *History) Len() int

Len returns the number of containers in the history.

func (*History) Less

func (history *History) Less(i, j int) bool

Less compares two containers and returns true if the second one was created before the first one.

func (*History) Swap

func (history *History) Swap(i, j int)

Swap switches containers i and j positions in the history.

type Mount

type Mount struct {
	Source      string `json:"source"`
	Destination string `json:"destination"`
	Writable    bool   `json:"writable"`
	Data        string `json:"data"`
	Propagation string `json:"mountpropagation"`
}

Mount contains information for a mount operation.

type State

type State struct {
	sync.Mutex
	// FIXME: Why do we have both paused and running if a
	// container cannot be paused and running at the same time?
	Running           bool
	Paused            bool
	Restarting        bool
	OOMKilled         bool
	RemovalInProgress bool // Not need for this to be persistent on disk.
	Dead              bool
	Pid               int
	ExitCodeValue     int    `json:"ExitCode"`
	ErrorMsg          string `json:"Error"` // contains last known error when starting the container
	StartedAt         time.Time
	FinishedAt        time.Time

	Health *Health
	// contains filtered or unexported fields
}

State holds the current container state, and has methods to get and set the state. Container has an embed, which allows all of the functions defined against State to run against Container.

func NewState

func NewState() *State

NewState creates a default state object with a fresh channel for state changes.

func (*State) Error

func (s *State) Error() string

Error returns current error for the state.

func (*State) ExitCode

func (s *State) ExitCode() int

ExitCode returns current exitcode for the state. Take lock before if state may be shared.

func (*State) GetPID

func (s *State) GetPID() int

GetPID holds the process id of a container.

func (*State) HealthString

func (s *State) HealthString() string

HealthString returns a single string to describe health status.

func (*State) IsPaused

func (s *State) IsPaused() bool

IsPaused returns whether the container is paused or not.

func (*State) IsRestarting

func (s *State) IsRestarting() bool

IsRestarting returns whether the container is restarting or not.

func (*State) IsRunning

func (s *State) IsRunning() bool

IsRunning returns whether the running flag is set. Used by Container to check whether a container is running.

func (*State) ResetRemovalInProgress

func (s *State) ResetRemovalInProgress()

ResetRemovalInProgress makes the RemovalInProgress state to false.

func (*State) SetDead

func (s *State) SetDead()

SetDead sets the container state to "dead"

func (*State) SetError

func (s *State) SetError(err error)

SetError sets the container's error state. This is useful when we want to know the error that occurred when container transits to another state when inspecting it

func (*State) SetExitCode

func (s *State) SetExitCode(ec int)

SetExitCode sets current exitcode for the state. Take lock before if state may be shared.

func (*State) SetRemovalInProgress

func (s *State) SetRemovalInProgress() bool

SetRemovalInProgress sets the container state as being removed. It returns true if the container was already in that state.

func (*State) SetRestarting

func (s *State) SetRestarting(exitStatus *ExitStatus)

SetRestarting sets the container state to "restarting" without locking. It also sets the container PID to 0.

func (*State) SetRunning

func (s *State) SetRunning(pid int, initial bool)

SetRunning sets the state of the container to "running".

func (*State) SetStopped

func (s *State) SetStopped(exitStatus *ExitStatus)

SetStopped sets the container state to "stopped" without locking.

func (*State) StateString

func (s *State) StateString() string

StateString returns a single string to describe state

func (*State) String

func (s *State) String() string

String returns a human-readable description of the state

func (*State) WaitStop

func (s *State) WaitStop(timeout time.Duration) (int, error)

WaitStop waits until state is stopped. If state already stopped it returns immediately. If you want wait forever you must supply negative timeout. Returns exit code, that was passed to SetStopped

func (*State) WaitWithContext

func (s *State) WaitWithContext(ctx context.Context) error

WaitWithContext waits for the container to stop. Optional context can be passed for canceling the request.

type StateStatus

type StateStatus struct {
	// contains filtered or unexported fields
}

StateStatus is used to return an error type implementing both exec.ExitCode and error. This type is needed as State include a sync.Mutex field which make copying it unsafe.

func (*StateStatus) Error

func (ss *StateStatus) Error() string

Error returns current error for the state.

func (*StateStatus) ExitCode

func (ss *StateStatus) ExitCode() int

ExitCode returns current exitcode for the state.

type Store

type Store interface {
	// Add appends a new container to the store.
	Add(string, *Container)
	// Get returns a container from the store by the identifier it was stored with.
	Get(string) *Container
	// Delete removes a container from the store by the identifier it was stored with.
	Delete(string)
	// List returns a list of containers from the store.
	List() []*Container
	// Size returns the number of containers in the store.
	Size() int
	// First returns the first container found in the store by a given filter.
	First(StoreFilter) *Container
	// ApplyAll calls the reducer function with every container in the store.
	ApplyAll(StoreReducer)
}

Store defines an interface that any container store must implement.

func NewMemoryStore

func NewMemoryStore() Store

NewMemoryStore initializes a new memory store.

type StoreFilter

type StoreFilter func(*Container) bool

StoreFilter defines a function to filter container in the store.

type StoreReducer

type StoreReducer func(*Container)

StoreReducer defines a function to manipulate containers in the store

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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