@ -15,13 +15,14 @@ import (
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/docker/buildx/util/tracing" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/docker/cli/cli" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/docker/cli/cli/command" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/docker/cli/opts" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dockeropts  "github.com/docker/cli/opts" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/docker/docker/pkg/ioutils" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/docker/go-units" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/moby/buildkit/client" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/moby/buildkit/session/auth/authprovider" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/moby/buildkit/util/appcontext" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/pkg/errors" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/sirupsen/logrus" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/spf13/cobra" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/spf13/pflag" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				) 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -29,54 +30,36 @@ import (
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				const  defaultTargetName  =  "default" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				type  buildOptions  struct  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					commonOptions 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					contextPath     string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dockerfileName  string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					tags            [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					labels          [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					buildArgs       [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					allow        [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					buildArgs    [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					cacheFrom    [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					cacheTo      [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					target       string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					platforms    [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					secrets      [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ssh          [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					outputs      [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					imageIDFile  string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					extraHosts   [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					imageIDFile  string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					labels       [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					networkMode  string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					outputs      [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					platforms    [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					quiet        bool 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					shmSize      opts . MemBytes 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ulimits      * opts . UlimitOpt 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// unimplemented
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					squash  bool 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					allow  [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// hidden
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// untrusted   bool
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// memory         opts.MemBytes
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// memorySwap     opts.MemSwapBytes
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// shmSize        opts.MemBytes
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// cpuShares      int64
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// cpuPeriod      int64
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// cpuQuota       int64
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// cpuSetCpus     string
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// cpuSetMems     string
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// cgroupParent   string
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// isolation      string
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// compress    bool
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// securityOpt []string
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					secrets      [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					shmSize      dockeropts . MemBytes 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ssh          [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					tags         [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					target       string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ulimits      * dockeropts . UlimitOpt 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					commonOptions 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				type  commonOptions  struct  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					builder       string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					metadataFile  string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					noCache       * bool 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					progress      string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					pull          * bool 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					metadataFile  string  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// golangci-lint#826
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// nolint:structcheck
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					exportPush  bool 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -85,9 +68,6 @@ type commonOptions struct {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				func  runBuild ( dockerCli  command . Cli ,  in  buildOptions )  ( err  error )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					if  in . squash  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						return  errors . Errorf ( "squash currently not implemented" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ctx  :=  appcontext . Context ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ctx ,  end ,  err  :=  tracing . TraceCurrentCommand ( ctx ,  "build" ) 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -119,16 +99,16 @@ func runBuild(dockerCli command.Cli, in buildOptions) (err error) {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							DockerfilePath :  in . dockerfileName , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							InStream :        os . Stdin , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						} , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Tags :         in . tags , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Labels :       listToMap ( in . labels ,  false ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						BuildArgs :    listToMap ( in . buildArgs ,  true ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Pull :         pull , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						NoCache :      noCache , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Target :       in . target , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ImageIDFile :  in . imageIDFile , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ExtraHosts :   in . extraHosts , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ImageIDFile :  in . imageIDFile , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Labels :       listToMap ( in . labels ,  false ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						NetworkMode :  in . networkMode , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						NoCache :      noCache , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Pull :         pull , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ShmSize :      in . shmSize , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Tags :         in . tags , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Target :       in . target , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						Ulimits :      in . ulimits , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -268,7 +248,7 @@ func buildTargets(ctx context.Context, dockerCli command.Cli, opts map[string]bu
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				func  newBuildOptions ( )  buildOptions  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					ulimits  :=  make ( map [ string ] * units . Ulimit ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					return  buildOptions { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ulimits :   opts. NewUlimitOpt ( & ulimits ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ulimits :  docker opts. NewUlimitOpt ( & ulimits ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -283,91 +263,116 @@ func buildCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						RunE :  func ( cmd  * cobra . Command ,  args  [ ] string )  error  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							options . contextPath  =  args [ 0 ] 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							options . builder  =  rootOpts . builder 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							cmd . Flags ( ) . VisitAll ( checkWarnedFlags ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							return  runBuild ( dockerCli ,  options ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						} , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					var  platformsDefault  [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					if  v  :=  os . Getenv ( "DOCKER_DEFAULT_PLATFORM" ) ;  v  !=  ""  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						platformsDefault  =  [ ] string { v } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags  :=  cmd . Flags ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & options . exportPush ,  "push" ,  false ,  "Shorthand for `--output=type=registry`" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & options . exportLoad ,  "load" ,  false ,  "Shorthand for `--output=type=docker`" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringSliceVar ( & options . extraHosts ,  "add-host" ,  [ ] string { } ,  "Add a custom host-to-IP mapping (format: `host:ip`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "add-host" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringSliceVar ( & options . allow ,  "allow" ,  [ ] string { } ,  "Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVarP ( & options . tags ,  "tag" ,  "t" ,  [ ] string { } ,  "Name and optionally a tag (format: `name:tag`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "tag" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . buildArgs ,  "build-arg" ,  [ ] string { } ,  "Set build-time variables" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "build-arg" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables---build-arg" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . cacheFrom ,  "cache-from" ,  [ ] string { } ,  "External cache sources (e.g., `user/app:cache`, `type=local,src=path/to/dir`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . cacheTo ,  "cache-to" ,  [ ] string { } ,  "Cache export destinations (e.g., `user/app:cache`, `type=local,dest=path/to/dir`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVarP ( & options . dockerfileName ,  "file" ,  "f" ,  "" ,  "Name of the Dockerfile (default: `PATH/Dockerfile`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "file" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#specify-a-dockerfile--f" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . imageIDFile ,  "iidfile" ,  "" ,  "Write the image ID to the file" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . labels ,  "label" ,  [ ] string { } ,  "Set metadata for an image" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . cacheFrom ,  "cache-from" ,  [ ] string { } ,  "External cache sources (e.g., `user/app:cache`, `type=local,src=path/to/dir`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . cacheTo ,  "cache-to" ,  [ ] string { } ,  "Cache export destinations (e.g., `user/app:cache`, `type=local,dest=path/to/dir`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & options . exportLoad ,  "load" ,  false ,  "Shorthand for `--output=type=docker`" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . target ,  "target" ,  "" ,  "Set the target build stage to build." ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "target" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . networkMode ,  "network" ,  "default" ,  "Set the networking mode for the RUN instructions during build" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringSliceVar ( & options . allow ,  "allow" ,  [ ] string { } ,  "Allow extra privileged entitlement (e.g., `network.host`, `security.insecure`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVarP ( & options . outputs ,  "output" ,  "o" ,  [ ] string { } ,  "Output destination (format: `type=local,dest=path`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . platforms ,  "platform" ,  platformsDefault ,  "Set target platform for build" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & options . exportPush ,  "push" ,  false ,  "Shorthand for `--output=type=registry`" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVarP ( & options . quiet ,  "quiet" ,  "q" ,  false ,  "Suppress the build output and print image ID on success" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . networkMode ,  "network" ,  "default" ,  "Set the networking mode for the RUN instructions during build" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringSliceVar ( & options . extraHosts ,  "add-host" ,  [ ] string { } ,  "Add a custom host-to-IP mapping (format: `host:ip`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "add-host" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#add-entries-to-container-hosts-file---add-host" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . imageIDFile ,  "iidfile" ,  "" ,  "Write the image ID to the file" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . secrets ,  "secret" ,  [ ] string { } ,  "Secret file to expose to the build (format: `id=mysecret,src=/local/secret`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . Var ( & options . shmSize ,  "shm-size" ,  "Size of `/dev/shm`" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . Var ( options . ulimits ,  "ulimit" ,  "Ulimit options" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// not implemented
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & options . squash ,  "squash" ,  false ,  "Squash newly built layers into a single new layer" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "squash" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . ssh ,  "ssh" ,  [ ] string { } ,  "SSH agent socket or keys to expose to the build (format: `default|<id>[=<socket>|<key>[,<key>]]`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVarP ( & options . tags ,  "tag" ,  "t" ,  [ ] string { } ,  "Name and optionally a tag (format: `name:tag`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "tag" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#tag-an-image--t" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . target ,  "target" ,  "" ,  "Set the target build stage to build." ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "target" ,  "docs.external.url" ,  [ ] string { "https://docs.docker.com/engine/reference/commandline/build/#specifying-target-build-stage---target" } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . Var ( options . ulimits ,  "ulimit" ,  "Ulimit options" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					// hidden flags
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					var  ignore  string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					var  ignoreSlice  [ ] string 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					var  ignoreBool  bool 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					var  ignoreInt  int64 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringSliceVar ( & ignoreSlice ,  "security-opt" ,  [ ] string { } ,  "Security options" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "security-opt" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "cgroup-parent" ,  "" ,  "Optional parent cgroup for the container" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cgroup-parent" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					//flags.SetAnnotation("cgroup-parent", "flag-warn", []string{"cgroup-parent is not implemented."})
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & ignoreBool ,  "compress" ,  false ,  "Compress the build context using gzip" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "compress" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "isolation" ,  "" ,  "Container isolation technology" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "isolation" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "isolation" ,  "flag-warn" ,  [ ] string { "isolation flag is deprecated with BuildKit." } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringSliceVar ( & ignoreSlice ,  "security-opt" ,  [ ] string { } ,  "Security options" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "security-opt" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "security-opt" ,  "flag-warn" ,  [ ] string { ` security-opt flag is deprecated. "RUN --security=insecure" should be used with BuildKit. ` } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & ignoreBool ,  "squash" ,  false ,  "Squash newly built layers into a single new layer" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "squash" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . SetAnnotation ( "squash" ,  "flag-warn" ,  [ ] string { "experimental flag squash is removed with BuildKit. You should squash inside build using a multi-stage Dockerfile for efficiency." } ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVarP ( & ignore ,  "memory" ,  "m" ,  "" ,  "Memory limit" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "memory" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "memory-swap" ,  "" ,  "Swap limit equal to memory plus swap: `-1` to enable unlimited swap" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "memory-swap" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . Int64VarP ( & ignoreInt ,  "cpu-shares" ,  "c" ,  0 ,  "CPU shares (relative weight)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cpu-shares" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . Int64Var ( & ignoreInt ,  "cpu-period" ,  0 ,  "Limit the CPU CFS (Completely Fair Scheduler) period" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cpu-period" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . Int64Var ( & ignoreInt ,  "cpu-quota" ,  0 ,  "Limit the CPU CFS (Completely Fair Scheduler) quota" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cpu-quota" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "cpuset-cpus" ,  "" ,  "CPUs in which to allow execution (`0-3`, `0,1`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cpuset-cpus" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "cpuset-mems" ,  "" ,  "MEMs in which to allow execution (`0-3`, `0,1`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cpuset-mems" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "cgroup-parent" ,  "" ,  "Optional parent cgroup for the container" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "cgroup-parent" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & ignore ,  "isolation" ,  "" ,  "Container isolation technology" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "isolation" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & ignoreBool ,  "rm" ,  true ,  "Remove intermediate containers after a successful build" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "rm" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . BoolVar ( & ignoreBool ,  "force-rm" ,  false ,  "Always remove intermediate containers" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . MarkHidden ( "force-rm" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					platformsDefault  :=  [ ] string { } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					if  v  :=  os . Getenv ( "DOCKER_DEFAULT_PLATFORM" ) ;  v  !=  ""  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						platformsDefault  =  [ ] string { v } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . platforms ,  "platform" ,  platformsDefault ,  "Set target platform for build" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . secrets ,  "secret" ,  [ ] string { } ,  "Secret file to expose to the build (format: `id=mysecret,src=/local/secret`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVar ( & options . ssh ,  "ssh" ,  [ ] string { } ,  "SSH agent socket or keys to expose to the build (format: `default|<id>[=<socket>|<key>[,<key>]]`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringArrayVarP ( & options . outputs ,  "output" ,  "o" ,  [ ] string { } ,  "Output destination (format: `type=local,dest=path`)" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					commonBuildFlags ( & options . commonOptions ,  flags ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					return  cmd 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -378,6 +383,19 @@ func commonBuildFlags(options *commonOptions, flags *pflag.FlagSet) {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					flags . StringVar ( & options . metadataFile ,  "metadata-file" ,  "" ,  "Write build result metadata to the file" ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				func  checkWarnedFlags ( f  * pflag . Flag )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					if  ! f . Changed  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						return 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					for  t ,  m  :=  range  f . Annotations  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						switch  t  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						case  "flag-warn" : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							logrus . Warn ( m [ 0 ] ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
							break 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				func  listToMap ( values  [ ] string ,  defaultEnv  bool )  map [ string ] string  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					result  :=  make ( map [ string ] string ,  len ( values ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					for  _ ,  value  :=  range  values  {