mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
a7278cad98
Closes #532 This requires the container id to always be passed to all runc commands as arg one on the cli. This was the result of the last OCI meeting and how operations work with the spec. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
104 lines
2.6 KiB
Go
104 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/codegangsta/cli"
|
|
"github.com/opencontainers/specs"
|
|
)
|
|
|
|
const (
|
|
version = "0.0.7"
|
|
specConfig = "config.json"
|
|
usage = `Open Container Initiative runtime
|
|
|
|
runc is a command line client for running applications packaged according to
|
|
the Open Container Format (OCF) and is a compliant implementation of the
|
|
Open Container Initiative specification.
|
|
|
|
runc integrates well with existing process supervisors to provide a production
|
|
container runtime environment for applications. It can be used with your
|
|
existing process monitoring tools and the container will be spawned as a
|
|
direct child of the process supervisor.
|
|
|
|
After creating config files for your root filesystem with runc, you can execute
|
|
a container in your shell by running:
|
|
|
|
# cd /mycontainer
|
|
# runc start [ -b bundle ] <container-id>
|
|
|
|
If not specified, the default value for the 'bundle' is the current directory.
|
|
'Bundle' is the directory where '` + specConfig + `' must be located.`
|
|
)
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
app.Name = "runc"
|
|
app.Usage = usage
|
|
app.Version = fmt.Sprintf("%s\nspec version %s", version, specs.Version)
|
|
app.Flags = []cli.Flag{
|
|
cli.BoolFlag{
|
|
Name: "debug",
|
|
Usage: "enable debug output for logging",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "log",
|
|
Usage: "set the log file path where internal debug information is written",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "log-format",
|
|
Value: "text",
|
|
Usage: "set the format used by logs ('text' (default), or 'json')",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "root",
|
|
Value: specs.LinuxStateDirectory,
|
|
Usage: "root directory for storage of container state (this should be located in tmpfs)",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "criu",
|
|
Value: "criu",
|
|
Usage: "path to the criu binary used for checkpoint and restore",
|
|
},
|
|
}
|
|
app.Commands = []cli.Command{
|
|
checkpointCommand,
|
|
deleteCommand,
|
|
eventsCommand,
|
|
execCommand,
|
|
killCommand,
|
|
listCommand,
|
|
pauseCommand,
|
|
restoreCommand,
|
|
resumeCommand,
|
|
specCommand,
|
|
startCommand,
|
|
}
|
|
app.Before = func(context *cli.Context) error {
|
|
if context.GlobalBool("debug") {
|
|
logrus.SetLevel(logrus.DebugLevel)
|
|
}
|
|
if path := context.GlobalString("log"); path != "" {
|
|
f, err := os.Create(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
logrus.SetOutput(f)
|
|
}
|
|
switch context.GlobalString("log-format") {
|
|
case "text":
|
|
// retain logrus's default.
|
|
case "json":
|
|
logrus.SetFormatter(new(logrus.JSONFormatter))
|
|
default:
|
|
logrus.Fatalf("unknown log-format %q", context.GlobalString("log-format"))
|
|
}
|
|
return nil
|
|
}
|
|
if err := app.Run(os.Args); err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|