func createContainer(context *cli.Context, id string, spec *specs.Spec) (libcontainer.Container, error) { config, err := specconv.CreateLibcontainerConfig(&specconv.CreateOpts{ CgroupName: id, UseSystemdCgroup: context.GlobalBool("systemd-cgroup"), NoPivotRoot: context.Bool("no-pivot"), NoNewKeyring: context.Bool("no-new-keyring"), Spec: spec, }) if err != nil { return nil, err } if _, err := os.Stat(config.Rootfs); err != nil { if os.IsNotExist(err) { return nil, fmt.Errorf("rootfs (%q) does not exist", config.Rootfs) } return nil, err } factory, err := loadFactory(context) if err != nil { return nil, err } return factory.Create(id, config) }
// startContainer starts the container. Returns the exit status or -1 and an // error. Signals sent to the current process will be forwarded to container. func startContainer(spec *specs.Spec, id, pidFile string, detach, useSystemdCgroup bool) (int, error) { // create the libcontainer config config, err := specconv.CreateLibcontainerConfig(&specconv.CreateOpts{ CgroupName: id, UseSystemdCgroup: useSystemdCgroup, NoPivotRoot: false, Spec: spec, }) if err != nil { return -1, err } if _, err := os.Stat(config.Rootfs); err != nil { if os.IsNotExist(err) { return -1, fmt.Errorf("rootfs (%q) does not exist", config.Rootfs) } return -1, err } factory, err := loadFactory(useSystemdCgroup) if err != nil { return -1, err } container, err := factory.Create(id, config) if err != nil { return -1, err } // Support on-demand socket activation by passing file descriptors into the container init process. listenFDs := []*os.File{} if os.Getenv("LISTEN_FDS") != "" { listenFDs = activation.Files(false) } r := &runner{ enableSubreaper: true, shouldDestroy: true, container: container, console: console, detach: detach, pidFile: pidFile, listenFDs: listenFDs, } return r.run(&spec.Process) }
func createContainer(context *cli.Context, id string, spec *specs.Spec) (libcontainer.Container, error) { config, err := specconv.CreateLibcontainerConfig(&specconv.CreateOpts{ CgroupName: id, UseSystemdCgroup: context.GlobalBool("systemd-cgroup"), NoPivotRoot: context.Bool("no-pivot"), NoNewKeyring: context.Bool("no-new-keyring"), Spec: spec, }) if err != nil { return nil, err } factory, err := loadFactory(context) if err != nil { return nil, err } return factory.Create(id, config) }
func loadConfig(path string) (*configs.Config, error) { f, err := os.Open(path) if err != nil { if os.IsNotExist(err) { return nil, fmt.Errorf("JSON specification file %s not found", path) } return nil, err } defer f.Close() var spec *specs.Spec if err = json.NewDecoder(f).Decode(&spec); err != nil { return nil, err } var config *configs.Config config, err = specconv.CreateLibcontainerConfig(&specconv.CreateOpts{ CgroupName: "", UseSystemdCgroup: false, NoPivotRoot: true, NoNewKeyring: true, Spec: spec, }) return config, nil }
if imagePath == "" { imagePath = getDefaultImagePath(context) } bundle := context.String("bundle") if bundle != "" { if err := os.Chdir(bundle); err != nil { return err } } spec, err := loadSpec(specConfig) if err != nil { return err } config, err := specconv.CreateLibcontainerConfig(&specconv.CreateOpts{ CgroupName: id, UseSystemdCgroup: context.GlobalBool("systemd-cgroup"), NoPivotRoot: context.Bool("no-pivot"), Spec: spec, }) if err != nil { return err } status, err := restoreContainer(context, spec, config, imagePath) if err == nil { os.Exit(status) } return err }, } func restoreContainer(context *cli.Context, spec *specs.Spec, config *configs.Config, imagePath string) (code int, err error) { var (