Package dockerfile is the evaluation step in the Dockerfile parse/evaluate pipeline.

It incorporates a dispatch table based on the parser.Node values (see the parser package for more information) that are yielded from the parser itself. Calling NewBuilder with the BuildOpts struct can be used to customize the experience for execution purposes only. Parsing is controlled in the parser package, and this division of responsibility should be respected.

Please see the jump table targets for the actual invocations, most of which will call out to the functions in internals.go to deal with their tasks.

ONBUILD is a special case, which is covered in the onbuild() func in dispatchers.go.

The evaluator uses the concept of "steps", which are usually each processable line in the Dockerfile. Each step is numbered and certain actions are taken before and after each step, such as creating an image ID and removing temporary containers and images. Note that ONBUILD creates a kinda-sorta "sub run" which includes its own set of steps (usually only one of them).



This section is empty.


View Source
var BuiltinAllowedBuildArgs = map[string]bool{
	"HTTP_PROXY":  true,
	"http_proxy":  true,
	"HTTPS_PROXY": true,
	"https_proxy": true,
	"FTP_PROXY":   true,
	"ftp_proxy":   true,
	"NO_PROXY":    true,
	"no_proxy":    true,

BuiltinAllowedBuildArgs is list of built-in allowed build args


func BuildFromConfig

func BuildFromConfig(config *container.Config, changes []string) (*container.Config, error)

BuildFromConfig builds directly from `changes`, treating it as if it were the contents of a Dockerfile It will: - Call parse.Parse() to get an AST root for the concatenated Dockerfile entries. - Do build by calling builder.dispatch() to call all entries' handling routines

BuildFromConfig is used by the /commit endpoint, with the changes coming from the query parameter of the same name.

TODO: Remove?

func ProcessWord

func ProcessWord(word string, env []string, escapeToken rune) (string, error)

ProcessWord will use the 'env' list of environment variables, and replace any env var references in 'word'.

func ProcessWords

func ProcessWords(word string, env []string, escapeToken rune) ([]string, error)

ProcessWords will use the 'env' list of environment variables, and replace any env var references in 'word' then it will also return a slice of strings which represents the 'word' split up based on spaces - taking into account quotes. Note that this splitting is done **after** the env var substitutions are done. Note, each one is trimmed to remove leading and trailing spaces (unless they are quoted", but ProcessWord retains spaces between words.


type BFlags

type BFlags struct {
	Args []string // actual flags/args from cmd line

	Err error
	// contains filtered or unexported fields

BFlags contains all flags information for the builder

func NewBFlags

func NewBFlags() *BFlags

NewBFlags returns the new BFlags struct

func (*BFlags) AddBool

func (bf *BFlags) AddBool(name string, def bool) *Flag

AddBool adds a bool flag to BFlags Note, any error will be generated when Parse() is called (see Parse).

func (*BFlags) AddString

func (bf *BFlags) AddString(name string, def string) *Flag

AddString adds a string flag to BFlags Note, any error will be generated when Parse() is called (see Parse).

func (*BFlags) Parse

func (bf *BFlags) Parse() error

Parse parses and checks if the BFlags is valid. Any error noticed during the AddXXX() funcs will be generated/returned here. We do this because an error during AddXXX() is more like a compile time error so it doesn't matter too much when we stop our processing as long as we do stop it, so this allows the code around AddXXX() to be just:

defFlag := AddString("description", "")

w/o needing to add an if-statement around each one.

type BuildManager

type BuildManager struct {
	// contains filtered or unexported fields

BuildManager implements builder.Backend and is shared across all Builder objects.

func NewBuildManager

func NewBuildManager(b builder.Backend) (bm *BuildManager)

NewBuildManager creates a BuildManager.

func (*BuildManager) BuildFromContext

func (bm *BuildManager) BuildFromContext(ctx context.Context, src io.ReadCloser, remote string, buildOptions *types.ImageBuildOptions, pg backend.ProgressWriter) (string, error)

BuildFromContext builds a new image from a given context.

type Builder

type Builder struct {
	Stdout io.Writer
	Stderr io.Writer
	Output io.Writer
	// contains filtered or unexported fields

Builder is a Dockerfile builder It implements the builder.Backend interface.

func NewBuilder

func NewBuilder(clientCtx context.Context, config *types.ImageBuildOptions, backend builder.Backend, buildContext builder.Context, dockerfile io.ReadCloser) (b *Builder, err error)

NewBuilder creates a new Dockerfile builder from an optional dockerfile and a Config. If dockerfile is nil, the Dockerfile specified by Config.DockerfileName, will be read from the Context passed to Build().

func (*Builder) Cancel

func (b *Builder) Cancel()

Cancel cancels an ongoing Dockerfile build.

type Flag

type Flag struct {
	Value string
	// contains filtered or unexported fields

Flag contains all information for a flag

func (*Flag) IsTrue

func (fl *Flag) IsTrue() bool

IsTrue checks if a bool flag is true

func (*Flag) IsUsed

func (fl *Flag) IsUsed() bool

IsUsed checks if the flag is used

type FlagType

type FlagType int

FlagType is the type of the build flag


Path Synopsis
command Package command contains the set of Dockerfile commands.
parser Package parser implements a parser and parse tree dumper for Dockerfiles.