diff --git a/cmd/ctr/commands/containers/containers.go b/cmd/ctr/commands/containers/containers.go index ec49ff996..b89015216 100644 --- a/cmd/ctr/commands/containers/containers.go +++ b/cmd/ctr/commands/containers/containers.go @@ -53,11 +53,22 @@ var createCommand = cli.Command{ Flags: append(commands.SnapshotterFlags, commands.ContainerFlags...), Action: func(context *cli.Context) error { var ( - id = context.Args().Get(1) - ref = context.Args().First() + id string + ref string + config = context.IsSet("config") ) - if ref == "" { - return errors.New("image ref must be provided") + + if config { + id = context.Args().First() + if context.NArg() > 1 { + return errors.New("with spec config file, only container id should be provided") + } + } else { + id = context.Args().Get(1) + ref = context.Args().First() + if ref == "" { + return errors.New("image ref must be provided") + } } if id == "" { return errors.New("container id must be provided") diff --git a/cmd/ctr/commands/run/run.go b/cmd/ctr/commands/run/run.go index 935730259..c314b1e8c 100644 --- a/cmd/ctr/commands/run/run.go +++ b/cmd/ctr/commands/run/run.go @@ -110,15 +110,26 @@ var Command = cli.Command{ Action: func(context *cli.Context) error { var ( err error + id string + ref string - id = context.Args().Get(1) - ref = context.Args().First() tty = context.Bool("tty") detach = context.Bool("detach") + config = context.IsSet("config") ) - if ref == "" { - return errors.New("image ref must be provided") + if config { + id = context.Args().First() + if context.NArg() > 1 { + return errors.New("with spec config file, only container id should be provided") + } + } else { + id = context.Args().Get(1) + ref = context.Args().First() + + if ref == "" { + return errors.New("image ref must be provided") + } } if id == "" { return errors.New("container id must be provided") diff --git a/cmd/ctr/commands/run/run_unix.go b/cmd/ctr/commands/run/run_unix.go index ac22078f0..f968379f3 100644 --- a/cmd/ctr/commands/run/run_unix.go +++ b/cmd/ctr/commands/run/run_unix.go @@ -34,10 +34,14 @@ import ( // NewContainer creates a new container func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli.Context) (containerd.Container, error) { var ( - ref = context.Args().First() - id = context.Args().Get(1) - args = context.Args()[2:] + id string + Config = context.IsSet("config") ) + if Config { + id = context.Args().First() + } else { + id = context.Args().Get(1) + } if raw := context.String("checkpoint"); raw != "" { im, err := client.GetImage(ctx, raw) @@ -53,9 +57,14 @@ func NewContainer(ctx gocontext.Context, client *containerd.Client, context *cli spec containerd.NewContainerOpts ) - if context.IsSet("config") { + if Config { opts = append(opts, oci.WithSpecFromFile(context.String("config"))) } else { + var ( + ref = context.Args().First() + //for container's id is Args[1] + args = context.Args()[2:] + ) opts = append(opts, oci.WithDefaultSpec(), oci.WithDefaultUnixDevices) opts = append(opts, oci.WithEnv(context.StringSlice("env"))) opts = append(opts, withMounts(context))