Browse Source

Fix EXPOSE cache miss issue

Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes <guillaume@charmes.net> (github: creack)
Guillaume J. Charmes 11 years ago
parent
commit
ab26c16b32
4 changed files with 19 additions and 5 deletions
  1. 18 3
      buildfile.go
  2. 1 0
      runconfig/merge.go
  3. 0 1
      runtime/runtime.go
  4. 0 1
      server.go

+ 18 - 3
buildfile.go

@@ -7,6 +7,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/dotcloud/docker/archive"
+	"github.com/dotcloud/docker/nat"
 	"github.com/dotcloud/docker/registry"
 	"github.com/dotcloud/docker/runconfig"
 	"github.com/dotcloud/docker/runtime"
@@ -304,8 +305,22 @@ func (b *buildFile) CmdEntrypoint(args string) error {
 }
 
 func (b *buildFile) CmdExpose(args string) error {
-	ports := strings.Split(args, " ")
-	b.config.PortSpecs = append(ports, b.config.PortSpecs...)
+	portsTab := strings.Split(args, " ")
+
+	if b.config.ExposedPorts == nil {
+		b.config.ExposedPorts = make(nat.PortSet)
+	}
+	ports, _, err := nat.ParsePortSpecs(append(portsTab, b.config.PortSpecs...))
+	if err != nil {
+		return err
+	}
+	for port := range ports {
+		if _, exists := b.config.ExposedPorts[port]; !exists {
+			b.config.ExposedPorts[port] = struct{}{}
+		}
+	}
+	b.config.PortSpecs = nil
+
 	return b.commit("", b.config.Cmd, fmt.Sprintf("EXPOSE %v", ports))
 }
 
@@ -686,12 +701,12 @@ func (b *buildFile) commit(id string, autoCmd []string, comment string) error {
 		b.tmpContainers[container.ID] = struct{}{}
 		fmt.Fprintf(b.outStream, " ---> Running in %s\n", utils.TruncateID(container.ID))
 		id = container.ID
+
 		if err := container.Mount(); err != nil {
 			return err
 		}
 		defer container.Unmount()
 	}
-
 	container := b.runtime.Get(id)
 	if container == nil {
 		return fmt.Errorf("An error occured while creating the container")

+ 1 - 0
runconfig/merge.go

@@ -64,6 +64,7 @@ func Merge(userConf, imageConf *Config) error {
 			}
 		}
 	}
+
 	if !userConf.Tty {
 		userConf.Tty = imageConf.Tty
 	}

+ 0 - 1
runtime/runtime.go

@@ -542,7 +542,6 @@ func (runtime *Runtime) Create(config *runconfig.Config, name string) (*Containe
 // The image can optionally be tagged into a repository
 func (runtime *Runtime) Commit(container *Container, repository, tag, comment, author string, config *runconfig.Config) (*image.Image, error) {
 	// FIXME: freeze the container before copying it to avoid data corruption?
-	// FIXME: this shouldn't be in commands.
 	if err := container.Mount(); err != nil {
 		return nil, err
 	}

+ 0 - 1
server.go

@@ -1970,7 +1970,6 @@ func (srv *Server) canDeleteImage(imgID string) error {
 }
 
 func (srv *Server) ImageGetCached(imgID string, config *runconfig.Config) (*image.Image, error) {
-
 	// Retrieve all images
 	images, err := srv.runtime.Graph().Map()
 	if err != nil {