From 602786cd60746cd2baf7bb14fb6acb60f9554f50 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 --- builder.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/builder.go b/builder.go index 84fb01eb49..24e6dc1e67 100644 --- a/builder.go +++ b/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 a64ebe5feb84d65adbc23ee9d2119f5eab836079 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 --- builder.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/builder.go b/builder.go index 24e6dc1e67..3c76712226 100644 --- a/builder.go +++ b/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 db4417b601feedb03cc70b79f64456e817ce0c05 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 --- builder.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/builder.go b/builder.go index 3c76712226..980d001904 100644 --- a/builder.go +++ b/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 979db00d9af4741572ece9c67061526d5d4a6616 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 --- builder.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder.go b/builder.go index 980d001904..f22d4864e6 100644 --- a/builder.go +++ b/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 3439cd9cea8056cce62d46dd5cf59d6d5b50ef84 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 --- builder.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/builder.go b/builder.go index f22d4864e6..61ea03311c 100644 --- a/builder.go +++ b/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