diff --git a/local/compose/pull.go b/local/compose/pull.go index bdb573cc6..cc8d16e5b 100644 --- a/local/compose/pull.go +++ b/local/compose/pull.go @@ -162,23 +162,31 @@ func (s *composeService) pullRequiredImages(ctx context.Context, project *types. info.IndexServerAddress = registry.IndexServer } + var needPull []types.ServiceConfig + for _, service := range project.Services { + if service.Image == "" { + continue + } + switch service.PullPolicy { + case "", types.PullPolicyMissing, types.PullPolicyIfNotPresent: + if _, ok := images[service.Image]; ok { + continue + } + case types.PullPolicyNever, types.PullPolicyBuild: + continue + case types.PullPolicyAlways: + // force pull + } + needPull = append(needPull, service) + } + if len(needPull) == 0 { + return nil + } + return progress.Run(ctx, func(ctx context.Context) error { w := progress.ContextWriter(ctx) eg, ctx := errgroup.WithContext(ctx) - for _, service := range project.Services { - if service.Image == "" { - continue - } - switch service.PullPolicy { - case types.PullPolicyMissing, types.PullPolicyIfNotPresent: - if _, ok := images[service.Image]; ok { - continue - } - case types.PullPolicyNever, types.PullPolicyBuild: - continue - case types.PullPolicyAlways: - // force pull - } + for _, service := range needPull { service := service eg.Go(func() error { err := s.pullServiceImage(ctx, service, info, s.configFile, w, quietPull)