2015-06-25 08:15:48 +08:00
|
|
|
# Runtime and Lifecycle
|
2015-06-06 08:39:27 +08:00
|
|
|
|
2015-06-25 08:15:48 +08:00
|
|
|
## Lifecycle
|
2015-06-06 08:39:27 +08:00
|
|
|
|
2015-06-25 08:15:48 +08:00
|
|
|
### Create
|
2015-06-17 09:08:14 +08:00
|
|
|
|
|
|
|
Creates the container: file system, namespaces, cgroups, capabilities.
|
|
|
|
|
2015-06-25 08:15:48 +08:00
|
|
|
### Start (process)
|
2015-06-17 09:08:14 +08:00
|
|
|
|
|
|
|
Runs a process in a container. Can be invoked several times.
|
|
|
|
|
2015-06-25 08:15:48 +08:00
|
|
|
### Stop (process)
|
2015-06-17 09:08:14 +08:00
|
|
|
|
2015-07-26 14:52:23 +08:00
|
|
|
Not sure we need that from runc cli. Process is killed from the outside.
|
2015-06-17 09:08:14 +08:00
|
|
|
|
2015-07-26 14:52:23 +08:00
|
|
|
This event needs to be captured by runc to run onstop event handlers.
|
2015-08-04 01:52:52 +08:00
|
|
|
|
|
|
|
## Hooks
|
|
|
|
Hooks allow one to run code before/after various lifecycle events of the container.
|
|
|
|
The state of the container is passed to the hooks over stdin, so the hooks could get the information they need to do their work.
|
|
|
|
|
|
|
|
Hook paths are absolute and are executed from the host's filesystem.
|
|
|
|
|
|
|
|
### Pre-start
|
|
|
|
The pre-start hooks are called after the container process is spawned, but before the user supplied command is executed.
|
|
|
|
They are called after the container namespaces are created on Linux, so they provide an opportunity to customize the container.
|
|
|
|
In Linux, for e.g., the network namespace could be configured in this hook.
|
|
|
|
|
|
|
|
If a hook returns a non-zero exit code, then an error including the exit code and the stderr is returned to the caller and the container is torn down.
|
|
|
|
|
|
|
|
### Post-stop
|
|
|
|
The post-stop hooks are called after the container process is stopped. Cleanup or debugging could be performed in such a hook.
|
|
|
|
If a hook returns a non-zero exit code, then an error is logged and the remaining hooks are executed.
|
|
|
|
|
|
|
|
*Example*
|
|
|
|
|
|
|
|
```json
|
|
|
|
"hooks" : {
|
|
|
|
"prestart": [
|
|
|
|
{
|
|
|
|
"path": "/usr/bin/fix-mounts",
|
|
|
|
"args": ["arg1", "arg2"],
|
|
|
|
"env": [ "key1=value1"]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"path": "/usr/bin/setup-network"
|
|
|
|
}
|
|
|
|
],
|
|
|
|
"poststop": [
|
|
|
|
{
|
|
|
|
"path": "/usr/sbin/cleanup.sh",
|
|
|
|
"args": ["-f"]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
`path` is required for a hook. `args` and `env` are optional.
|