From d43649a37ea28c74cbe58b580c0fdf76eeaa5f1f Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Wed, 24 Apr 2013 15:14:10 -0700 Subject: [PATCH 1/5] Moving runtime.Create to builder.Create Upstream-commit: 602786cd60746cd2baf7bb14fb6acb60f9554f50 Component: engine --- components/engine/builder.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/components/engine/builder.go b/components/engine/builder.go index 84fb01eb49..24e6dc1e67 100644 --- a/components/engine/builder.go +++ b/components/engine/builder.go @@ -274,6 +274,10 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e fmt.Fprintf(stdout, "===> %s\n", image.ShortId()) break } + config, err := ParseRun([]string{image.Id, "/bin/sh", "-c", tmp[1]}, nil, builder.runtime.capabilities) + if err != nil { + return err + } // Create the container and start it c, err := builder.Create(config) @@ -283,6 +287,9 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e if err := c.Start(); err != nil { return nil, err } + if err := c.Start(); err != nil { + return err + } tmpContainers[c.Id] = struct{}{} // Wait for it to finish From 6aedcc24205631b8825d32aa118296e0e55ddcc8 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Thu, 2 May 2013 02:51:14 -0700 Subject: [PATCH 2/5] Allow to stack multiple EXPOSE instructions Upstream-commit: a64ebe5feb84d65adbc23ee9d2119f5eab836079 Component: engine --- components/engine/builder.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/components/engine/builder.go b/components/engine/builder.go index 24e6dc1e67..3c76712226 100644 --- a/components/engine/builder.go +++ b/components/engine/builder.go @@ -197,6 +197,7 @@ func (builder *Builder) getCachedImage(image *Image, config *Config) (*Image, er func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, error) { var ( image, base *Image + config *Config maintainer string tmpContainers map[string]struct{} = make(map[string]struct{}) tmpImages map[string]struct{} = make(map[string]struct{}) @@ -251,6 +252,7 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e return nil, err } } + config = &Config{} break case "mainainer": @@ -328,8 +330,10 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e } tmpContainers[c.Id] = struct{}{} + config.PortSpecs = append(ports, config.PortSpecs...) + // Commit the container - base, err = builder.Commit(c, "", "", "", maintainer, &Config{PortSpecs: ports}) + base, err = builder.Commit(c, "", "", "", maintainer, config) if err != nil { return nil, err } From 1fa62362e87afde2a95a6111376dd53d6ea958a5 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Thu, 2 May 2013 03:00:56 -0700 Subject: [PATCH 3/5] Implement the CMD instruction in order to allow autorun Upstream-commit: db4417b601feedb03cc70b79f64456e817ce0c05 Component: engine --- components/engine/builder.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/components/engine/builder.go b/components/engine/builder.go index 3c76712226..980d001904 100644 --- a/components/engine/builder.go +++ b/components/engine/builder.go @@ -2,6 +2,7 @@ package docker import ( "bufio" + "encoding/json" "fmt" "io" "os" @@ -311,6 +312,35 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e // use the base as the new image image = base + break + case "cmd": + fmt.Fprintf(stdout, "CMD %s\n", arguments) + + // Create the container and start it + c, err := builder.Create(&Config{Image: image.Id, Cmd: []string{"", ""}}) + if err != nil { + return nil, err + } + if err := c.Start(); err != nil { + return nil, err + } + tmpContainers[c.Id] = struct{}{} + + cmd := []string{} + if err := json.Unmarshal([]byte(arguments), &cmd); err != nil { + return nil, err + } + config.Cmd = cmd + + // Commit the container + base, err = builder.Commit(c, "", "", "", maintainer, config) + if err != nil { + return nil, err + } + tmpImages[base.Id] = struct{}{} + + fmt.Fprintf(stdout, "===> %s\n", base.ShortId()) + image = base break case "expose": ports := strings.Split(arguments, " ") @@ -340,7 +370,6 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e tmpImages[base.Id] = struct{}{} fmt.Fprintf(stdout, "===> %s\n", base.ShortId()) - image = base break case "insert": From 8112d65cfbec8137ba72b16f45892ae642e884a6 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Thu, 2 May 2013 03:58:58 -0700 Subject: [PATCH 4/5] Fix typo in builder Upstream-commit: 979db00d9af4741572ece9c67061526d5d4a6616 Component: engine --- components/engine/builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/engine/builder.go b/components/engine/builder.go index 980d001904..f22d4864e6 100644 --- a/components/engine/builder.go +++ b/components/engine/builder.go @@ -256,7 +256,7 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e config = &Config{} break - case "mainainer": + case "maintainer": fmt.Fprintf(stdout, "MAINTAINER %s\n", arguments) maintainer = arguments break From d00bfd7982a15bbfa23b736fb74f95c5d7ce566d Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Mon, 6 May 2013 17:07:56 -0700 Subject: [PATCH 5/5] Rebase fix Upstream-commit: 3439cd9cea8056cce62d46dd5cf59d6d5b50ef84 Component: engine --- components/engine/builder.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/components/engine/builder.go b/components/engine/builder.go index f22d4864e6..61ea03311c 100644 --- a/components/engine/builder.go +++ b/components/engine/builder.go @@ -277,10 +277,6 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e fmt.Fprintf(stdout, "===> %s\n", image.ShortId()) break } - config, err := ParseRun([]string{image.Id, "/bin/sh", "-c", tmp[1]}, nil, builder.runtime.capabilities) - if err != nil { - return err - } // Create the container and start it c, err := builder.Create(config) @@ -290,9 +286,6 @@ func (builder *Builder) Build(dockerfile io.Reader, stdout io.Writer) (*Image, e if err := c.Start(); err != nil { return nil, err } - if err := c.Start(); err != nil { - return err - } tmpContainers[c.Id] = struct{}{} // Wait for it to finish