فهرست منبع

Merge pull request #25550 from mrjana/net

Retry creating dynamic networks if not found
Tibor Vass 9 سال پیش
والد
کامیت
92b10b497c
1فایلهای تغییر یافته به همراه18 افزوده شده و 2 حذف شده
  1. 18 2
      daemon/cluster/executor/container/controller.go

+ 18 - 2
daemon/cluster/executor/container/controller.go

@@ -7,6 +7,7 @@ import (
 	executorpkg "github.com/docker/docker/daemon/cluster/executor"
 	executorpkg "github.com/docker/docker/daemon/cluster/executor"
 	"github.com/docker/engine-api/types"
 	"github.com/docker/engine-api/types"
 	"github.com/docker/engine-api/types/events"
 	"github.com/docker/engine-api/types/events"
+	"github.com/docker/libnetwork"
 	"github.com/docker/swarmkit/agent/exec"
 	"github.com/docker/swarmkit/agent/exec"
 	"github.com/docker/swarmkit/api"
 	"github.com/docker/swarmkit/api"
 	"github.com/docker/swarmkit/log"
 	"github.com/docker/swarmkit/log"
@@ -163,8 +164,23 @@ func (r *controller) Start(ctx context.Context) error {
 		return exec.ErrTaskStarted
 		return exec.ErrTaskStarted
 	}
 	}
 
 
-	if err := r.adapter.start(ctx); err != nil {
-		return errors.Wrap(err, "starting container failed")
+	for {
+		if err := r.adapter.start(ctx); err != nil {
+			if _, ok := err.(libnetwork.ErrNoSuchNetwork); ok {
+				// Retry network creation again if we
+				// failed because some of the networks
+				// were not found.
+				if err := r.adapter.createNetworks(ctx); err != nil {
+					return err
+				}
+
+				continue
+			}
+
+			return errors.Wrap(err, "starting container failed")
+		}
+
+		break
 	}
 	}
 
 
 	// no health check
 	// no health check