Documentation
¶
Overview ¶
Package container is the container lifecycle: created, running, exited; its root filesystem, its logs, its exit code. It runs modules through a runtime.Executor and knows nothing of images beyond the frozen lower filesystem and the run configuration it is handed.
Index ¶
- Constants
- Variables
- func DecodeRecord(v []byte) (*record, error)
- type Config
- type Container
- func (c *Container) Attach(ctx context.Context, logs bool, fn func(Record) error) error
- func (c *Container) FS() *rootfs.FS
- func (c *Container) ID() string
- func (c *Container) Logs(ctx context.Context, follow bool, fn func(Record) error) error
- func (c *Container) Snapshot() Snapshot
- func (c *Container) Wait(ctx context.Context, cond WaitCondition) (int, error)
- type CreateOptions
- type Logs
- type Manager
- func (m *Manager) Create(o CreateOptions) (*Container, error)
- func (m *Manager) Flush(ctx context.Context) error
- func (m *Manager) Get(ref string) (*Container, error)
- func (m *Manager) Kill(ref string) error
- func (m *Manager) List(all bool) []Snapshot
- func (m *Manager) Logs(ctx context.Context, ref string, follow bool, fn func(Record) error) error
- func (m *Manager) PersistError() error
- func (m *Manager) Prune() ([]string, int64)
- func (m *Manager) Remove(ctx context.Context, ref string, force bool) error
- func (m *Manager) Restart(ctx context.Context, ref string) error
- func (m *Manager) Restore(lower func(imageID string) (*rootfs.FS, error), lim rootfs.Limits) (RestoreReport, error)
- func (m *Manager) Shutdown(ctx context.Context)
- func (m *Manager) Start(ctx context.Context, ref string) error
- func (m *Manager) Stop(ctx context.Context, ref string) error
- func (m *Manager) UsesImage(imageID string) []string
- func (m *Manager) Wait(ctx context.Context, ref string, cond WaitCondition) (int, error)
- type Options
- type Record
- type RestoreReport
- type Snapshot
- type State
- type WaitCondition
Constants ¶
const ( Stdout byte = 1 Stderr byte = 2 )
Stream numbers, as in the Docker multiplexed stream format.
Variables ¶
var ( ErrNotFound = errors.New("no such container") ErrNameConflict = errors.New("container name already in use") ErrRunning = errors.New("container is running") ErrNotRunning = errors.New("container is not running") ErrAlreadyStarted = errors.New("container already started") ErrInvalid = errors.New("invalid container configuration") ErrTooMany = errors.New("too many containers") ErrAmbiguous = errors.New("multiple containers match") )
Errors the API layer maps to HTTP statuses.
Functions ¶
func DecodeRecord ¶ added in v0.4.0
DecodeRecord reads a stored container record; it is exported for the fuzzer and for tools that inspect a data root.
Types ¶
type Config ¶
type Config struct {
Image string `json:"Image"`
ImageID string `json:"-"`
Entrypoint []string `json:"Entrypoint"`
Cmd []string `json:"Cmd"`
Env []string `json:"Env"`
WorkingDir string `json:"WorkingDir"`
Labels map[string]string `json:"Labels"`
// MemoryLimitBytes bounds linear memory (0 = manager default).
MemoryLimitBytes int64 `json:"-"`
// AutoRemove removes the container when it exits (run --rm).
AutoRemove bool `json:"-"`
}
Config is how a container runs, resolved from the image config and the run overrides.
type Container ¶
type Container struct {
// contains filtered or unexported fields
}
Container is one container. Read it through Snapshot.
func (*Container) Attach ¶ added in v0.5.0
Attach streams to fn what the container writes from now on (with logs, what it wrote before too) until its next exit — of the run in progress, or of the next start when it is not running — or its removal.
func (*Container) Logs ¶
Logs streams the container's output to fn: everything kept so far and, with follow, everything written until the container stops running.
type CreateOptions ¶
type CreateOptions struct {
Name string
Config Config
// Lower is the image's frozen root filesystem.
Lower *rootfs.FS
}
CreateOptions describes a new container.
type Logs ¶
type Logs struct {
// contains filtered or unexported fields
}
Logs is a container's bounded, append-only output. When it exceeds its byte bound the oldest records are dropped, so a chatty container cannot exhaust the daemon's memory.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager owns every container of a daemon.
func NewManager ¶
NewManager returns a manager running modules on opt.Executor.
func (*Manager) Create ¶
func (m *Manager) Create(o CreateOptions) (*Container, error)
Create makes a container in the created state.
func (*Manager) PersistError ¶ added in v0.4.0
PersistError is the last checkpoint's failure, nil when the store holds every container's latest state.
func (*Manager) Prune ¶ added in v0.4.0
Prune removes every container that is not running and returns their IDs and the bytes their writable layers held.
func (*Manager) Restore ¶ added in v0.4.0
func (m *Manager) Restore(lower func(imageID string) (*rootfs.FS, error), lim rootfs.Limits) (RestoreReport, error)
Restore loads every stored container. lower returns the frozen root filesystem of an image by ID; lim bounds reading a stored writable layer. A record that fails its seal or its checks is deleted and reported; a blob that does, is dropped (the container keeps its configuration and loses its logs or its writes), and so is a container whose image is gone.
func (*Manager) Stop ¶ added in v0.5.0
Stop ends a running container and waits until it has exited. A wasm guest has no signal to catch, so there is no grace period: stopping is killing (docker stop's SIGKILL after the timeout, at once).
type Options ¶
type Options struct {
Executor runtime.Executor
// MemoryLimitBytes is the default linear-memory bound per container.
MemoryLimitBytes int64
// Timeout is the wall-clock bound of one run (0 = none).
Timeout time.Duration
// Quota bounds what one container may write to its filesystem.
Quota rootfs.Quota
// MaxLogBytes bounds one container's kept output (default 8 MiB).
MaxLogBytes int
// MaxContainers bounds how many containers exist (default 256).
MaxContainers int
// Store, when set, keeps containers across restarts: their state,
// logs and writable layers (see Restore).
Store state.Store
// CheckpointEvery is how often a running container's changes are
// stored (default 2s; negative: only at state changes).
CheckpointEvery time.Duration
// Events, when set, receives create, start, die, kill, stop, restart,
// destroy and prune, with Docker's attributes (image, name, labels,
// exitCode).
Events *events.Bus
}
Options configures a Manager.
type RestoreReport ¶ added in v0.4.0
type RestoreReport struct {
// Restored containers, of which Stopped were running when the engine
// stopped and are now exited with status 137.
Restored, Stopped int
// Removed are --rm containers that had run, removed as they would
// have been.
Removed []string
// Repaired describes what was found corrupted and dropped.
Repaired []string
}
RestoreReport says what Restore did.
type Snapshot ¶
type Snapshot struct {
ID string
Name string
Created time.Time
Config Config
State State
ExitCode int
Error string
TimedOut bool
StartedAt time.Time
FinishedAt time.Time
// Path is the resolved module path (empty until the first start).
Path string
// SizeRw is the bytes the container wrote to its filesystem.
SizeRw int64
}
Snapshot is a consistent copy of a container's state.
type WaitCondition ¶
type WaitCondition string
WaitCondition is a /containers/{id}/wait condition.
const ( WaitNotRunning WaitCondition = "not-running" WaitNextExit WaitCondition = "next-exit" WaitRemoved WaitCondition = "removed" )