mirror of
				https://github.com/opencontainers/runc.git
				synced 2025-10-31 19:13:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"os"
 | |
| 
 | |
| 	"github.com/urfave/cli"
 | |
| )
 | |
| 
 | |
| var createCommand = cli.Command{
 | |
| 	Name:  "create",
 | |
| 	Usage: "create a container",
 | |
| 	ArgsUsage: `<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.`,
 | |
| 	Description: `The create command creates an instance of a container for a bundle. The bundle
 | |
| is a directory with a specification file named "` + specConfig + `" and a root
 | |
| filesystem.
 | |
| 
 | |
| The specification file includes an args parameter. The args parameter is used
 | |
| to specify command(s) that get run when the container is started. To change the
 | |
| command(s) that get executed on start, edit the args parameter of the spec. See
 | |
| "runc spec --help" for more explanation.`,
 | |
| 	Flags: []cli.Flag{
 | |
| 		cli.StringFlag{
 | |
| 			Name:  "bundle, b",
 | |
| 			Value: "",
 | |
| 			Usage: `path to the root of the bundle directory, defaults to the current directory`,
 | |
| 		},
 | |
| 		cli.StringFlag{
 | |
| 			Name:  "console-socket",
 | |
| 			Value: "",
 | |
| 			Usage: "path to an AF_UNIX socket which will receive a file descriptor referencing the master end of the console's pseudoterminal",
 | |
| 		},
 | |
| 		cli.StringFlag{
 | |
| 			Name:  "pidfd-socket",
 | |
| 			Usage: "path to an AF_UNIX socket which will receive a file descriptor referencing the init process",
 | |
| 		},
 | |
| 		cli.StringFlag{
 | |
| 			Name:  "pid-file",
 | |
| 			Value: "",
 | |
| 			Usage: "specify the file to write the process id to",
 | |
| 		},
 | |
| 		cli.BoolFlag{
 | |
| 			Name:  "no-pivot",
 | |
| 			Usage: "do not use pivot root to jail process inside rootfs.  This should be used whenever the rootfs is on top of a ramdisk",
 | |
| 		},
 | |
| 		cli.BoolFlag{
 | |
| 			Name:  "no-new-keyring",
 | |
| 			Usage: "do not create a new session keyring for the container.  This will cause the container to inherit the calling processes session key",
 | |
| 		},
 | |
| 		cli.IntFlag{
 | |
| 			Name:  "preserve-fds",
 | |
| 			Usage: "Pass N additional file descriptors to the container (stdio + $LISTEN_FDS + N in total)",
 | |
| 		},
 | |
| 	},
 | |
| 	Action: func(context *cli.Context) error {
 | |
| 		if err := checkArgs(context, 1, exactArgs); err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 		status, err := startContainer(context, CT_ACT_CREATE, nil)
 | |
| 		if err == nil {
 | |
| 			// exit with the container's exit status so any external supervisor
 | |
| 			// is notified of the exit with the correct exit status.
 | |
| 			os.Exit(status)
 | |
| 		}
 | |
| 		return fmt.Errorf("runc create failed: %w", err)
 | |
| 	},
 | |
| }
 | 
