mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
8f206929b2
This ensures that anything written to the logs are synced as they happen. This also changes the error message of the libcontainer error. The original idea was to have this extra information in the message but it makes it hard to parse and if the caller needed this information they can just get it from the error type. Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
123 lines
3.2 KiB
Go
123 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/Sirupsen/logrus"
|
|
"github.com/codegangsta/cli"
|
|
"github.com/opencontainers/specs/specs-go"
|
|
)
|
|
|
|
// gitCommit will be the hash that the binary was built from
|
|
// and will be populated by the Makefile
|
|
var gitCommit = ""
|
|
|
|
const (
|
|
version = "0.0.9"
|
|
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.
|
|
|
|
Containers are configured using bundles. A bundle for a container is a directory
|
|
that includes a specification file named "` + specConfig + `" and a root filesystem.
|
|
The root filesystem contains the contents of the container.
|
|
|
|
To start a new instance of a container:
|
|
|
|
# runc start [ -b bundle ] <container-id>
|
|
|
|
Where "<container-id>" is your name for the instance of the container that you
|
|
are starting. The name you provide for the container instance must be unique on
|
|
your host. Providing the bundle directory using "-b" is optional. The default
|
|
value for "bundle" is the current directory.`
|
|
)
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
app.Name = "runc"
|
|
app.Usage = usage
|
|
v := []string{
|
|
version,
|
|
}
|
|
if gitCommit != "" {
|
|
v = append(v, fmt.Sprintf("commit: %s", gitCommit))
|
|
}
|
|
v = append(v, fmt.Sprintf("spec: %s", specs.Version))
|
|
app.Version = strings.Join(v, "\n")
|
|
app.Flags = []cli.Flag{
|
|
cli.BoolFlag{
|
|
Name: "debug",
|
|
Usage: "enable debug output for logging",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "log",
|
|
Value: "/dev/null",
|
|
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: "/run/runc",
|
|
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,
|
|
initCommand,
|
|
killCommand,
|
|
listCommand,
|
|
pauseCommand,
|
|
restoreCommand,
|
|
resumeCommand,
|
|
specCommand,
|
|
startCommand,
|
|
stateCommand,
|
|
}
|
|
app.Before = func(context *cli.Context) error {
|
|
if context.GlobalBool("debug") {
|
|
logrus.SetLevel(logrus.DebugLevel)
|
|
}
|
|
if path := context.GlobalString("log"); path != "" {
|
|
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND|os.O_SYNC, 0666)
|
|
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 {
|
|
fatal(err)
|
|
}
|
|
}
|