Browse Source

Merge pull request #25787 from tiborvass/cherry-pick-23790

[1.12] Skip always pulling images on integration tests
Tibor Vass 8 năm trước cách đây
mục cha
commit
6e7b8f41ca
2 tập tin đã thay đổi với 34 bổ sung31 xóa
  1. 33 30
      daemon/cluster/executor/container/controller.go
  2. 1 1
      integration-cli/daemon.go

+ 33 - 30
daemon/cluster/executor/container/controller.go

@@ -2,6 +2,7 @@ package container
 
 import (
 	"fmt"
+	"os"
 
 	executorpkg "github.com/docker/docker/daemon/cluster/executor"
 	"github.com/docker/engine-api/types"
@@ -89,39 +90,41 @@ func (r *controller) Prepare(ctx context.Context) error {
 		return err
 	}
 
-	if r.pulled == nil {
-		// Fork the pull to a different context to allow pull to continue
-		// on re-entrant calls to Prepare. This ensures that Prepare can be
-		// idempotent and not incur the extra cost of pulling when
-		// cancelled on updates.
-		var pctx context.Context
+	if os.Getenv("DOCKER_SERVICE_PREFER_OFFLINE_IMAGE") != "1" {
+		if r.pulled == nil {
+			// Fork the pull to a different context to allow pull to continue
+			// on re-entrant calls to Prepare. This ensures that Prepare can be
+			// idempotent and not incur the extra cost of pulling when
+			// cancelled on updates.
+			var pctx context.Context
 
-		r.pulled = make(chan struct{})
-		pctx, r.cancelPull = context.WithCancel(context.Background()) // TODO(stevvooe): Bind a context to the entire controller.
+			r.pulled = make(chan struct{})
+			pctx, r.cancelPull = context.WithCancel(context.Background()) // TODO(stevvooe): Bind a context to the entire controller.
 
-		go func() {
-			defer close(r.pulled)
-			r.pullErr = r.adapter.pullImage(pctx) // protected by closing r.pulled
-		}()
-	}
+			go func() {
+				defer close(r.pulled)
+				r.pullErr = r.adapter.pullImage(pctx) // protected by closing r.pulled
+			}()
+		}
 
-	select {
-	case <-ctx.Done():
-		return ctx.Err()
-	case <-r.pulled:
-		if r.pullErr != nil {
-			// NOTE(stevvooe): We always try to pull the image to make sure we have
-			// the most up to date version. This will return an error, but we only
-			// log it. If the image truly doesn't exist, the create below will
-			// error out.
-			//
-			// This gives us some nice behavior where we use up to date versions of
-			// mutable tags, but will still run if the old image is available but a
-			// registry is down.
-			//
-			// If you don't want this behavior, lock down your image to an
-			// immutable tag or digest.
-			log.G(ctx).WithError(r.pullErr).Error("pulling image failed")
+		select {
+		case <-ctx.Done():
+			return ctx.Err()
+		case <-r.pulled:
+			if r.pullErr != nil {
+				// NOTE(stevvooe): We always try to pull the image to make sure we have
+				// the most up to date version. This will return an error, but we only
+				// log it. If the image truly doesn't exist, the create below will
+				// error out.
+				//
+				// This gives us some nice behavior where we use up to date versions of
+				// mutable tags, but will still run if the old image is available but a
+				// registry is down.
+				//
+				// If you don't want this behavior, lock down your image to an
+				// immutable tag or digest.
+				log.G(ctx).WithError(r.pullErr).Error("pulling image failed")
+			}
 		}
 	}
 

+ 1 - 1
integration-cli/daemon.go

@@ -172,7 +172,7 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
 
 	args = append(args, providedArgs...)
 	d.cmd = exec.Command(dockerdBinary, args...)
-
+	d.cmd.Env = append(os.Environ(), "DOCKER_SERVICE_PREFER_OFFLINE_IMAGE=1")
 	d.cmd.Stdout = out
 	d.cmd.Stderr = out
 	d.logFile = out