diff --git a/buildfile.go b/buildfile.go index a6322a82a0..dbcec51889 100644 --- a/buildfile.go +++ b/buildfile.go @@ -65,6 +65,9 @@ func (b *buildFile) CmdFrom(name string) error { } b.image = image.ID b.config = &Config{} + if image.Config != nil { + b.config = image.Config + } if b.config.Env == nil || len(b.config.Env) == 0 { b.config.Env = append(b.config.Env, "HOME=/", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") } diff --git a/buildfile_test.go b/buildfile_test.go index c504b81aaa..a27ef33cf5 100644 --- a/buildfile_test.go +++ b/buildfile_test.go @@ -542,3 +542,39 @@ func TestBuildADDFileNotFound(t *testing.T) { t.Fail() } } + +func TestBuildInheritance(t *testing.T) { + runtime, err := newTestRuntime("") + if err != nil { + t.Fatal(err) + } + defer nuke(runtime) + + srv := &Server{ + runtime: runtime, + pullingPool: make(map[string]struct{}), + pushingPool: make(map[string]struct{}), + } + + img := buildImage(testContextTemplate{` + from {IMAGE} + expose 4243 + `, + nil, nil}, t, srv, true) + + img2 := buildImage(testContextTemplate{fmt.Sprintf(` + from %s + entrypoint ["/bin/echo"] + `, img.ID), + nil, nil}, t, srv, true) + + // from child + if img2.Config.Entrypoint[0] != "/bin/echo" { + t.Fail() + } + + // from parent + if img.Config.PortSpecs[0] != "4243" { + t.Fail() + } +}