builder.go 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. package daemon
  2. import (
  3. "io"
  4. "github.com/Sirupsen/logrus"
  5. "github.com/docker/docker/api/types/backend"
  6. "github.com/docker/docker/builder"
  7. "github.com/docker/docker/builder/dockerfile"
  8. "github.com/docker/engine-api/types"
  9. "golang.org/x/net/context"
  10. )
  11. // BuildFromContext builds a new image from a given context.
  12. func (daemon *Daemon) BuildFromContext(ctx context.Context, src io.ReadCloser, remote string, buildOptions *types.ImageBuildOptions, pg backend.ProgressWriter) (string, error) {
  13. buildContext, dockerfileName, err := builder.DetectContextFromRemoteURL(src, remote, pg.ProgressReaderFunc)
  14. if err != nil {
  15. return "", err
  16. }
  17. defer func() {
  18. if err := buildContext.Close(); err != nil {
  19. logrus.Debugf("[BUILDER] failed to remove temporary context: %v", err)
  20. }
  21. }()
  22. if len(dockerfileName) > 0 {
  23. buildOptions.Dockerfile = dockerfileName
  24. }
  25. m := dockerfile.NewBuildManager(daemon)
  26. return m.Build(ctx, buildOptions,
  27. builder.DockerIgnoreContext{ModifiableContext: buildContext},
  28. pg.StdoutFormatter, pg.StderrFormatter, pg.Output)
  29. }