diff --git a/api/server/router/local/image.go b/api/server/router/local/image.go index dbaae16524..6610157f84 100644 --- a/api/server/router/local/image.go +++ b/api/server/router/local/image.go @@ -16,6 +16,7 @@ import ( "github.com/docker/docker/builder/dockerfile" "github.com/docker/docker/cliconfig" "github.com/docker/docker/daemon/daemonbuilder" + derr "github.com/docker/docker/errors" "github.com/docker/docker/graph" "github.com/docker/docker/graph/tags" "github.com/docker/docker/pkg/archive" @@ -63,12 +64,11 @@ func (s *router) postCommit(ctx context.Context, w http.ResponseWriter, r *http. Config: c, } - container, err := s.daemon.Get(cname) - if err != nil { - return err + if !s.daemon.Exists(cname) { + return derr.ErrorCodeNoSuchContainer.WithArgs(cname) } - imgID, err := dockerfile.Commit(container, s.daemon, commitCfg) + imgID, err := dockerfile.Commit(cname, s.daemon, commitCfg) if err != nil { return err } diff --git a/builder/dockerfile/builder.go b/builder/dockerfile/builder.go index 8b8c6e8735..9dca0507f4 100644 --- a/builder/dockerfile/builder.go +++ b/builder/dockerfile/builder.go @@ -256,7 +256,12 @@ func BuildFromConfig(config *runconfig.Config, changes []string) (*runconfig.Con // Commit will create a new image from a container's changes // TODO: remove daemon, make Commit a method on *Builder ? -func Commit(container *daemon.Container, d *daemon.Daemon, c *CommitConfig) (string, error) { +func Commit(containerName string, d *daemon.Daemon, c *CommitConfig) (string, error) { + container, err := d.Get(containerName) + if err != nil { + return "", err + } + // It is not possible to commit a running container on Windows if runtime.GOOS == "windows" && container.IsRunning() { return "", fmt.Errorf("Windows does not support commit of a running container")